#include<iostream>
#include<vector>
#include <cmath>
#include <iomanip>
using namespace std;
long long n, d;
vector<vector<long long>> multiplyMatrices(const vector<vector<long long>>& A, const vector<vector<long long>>& B) {
long long rowsA = A.size();
long long colsA = A[0].size();
long long rowsB = B.size();
long long colsB = B[0].size();
vector<vector<long long>> result(rowsA, vector<long long>(colsB, 0));
for (long long i = 0; i < rowsA; ++i) {
for (long long j = 0; j < colsB; ++j) {
for (long long k = 0; k < colsA; ++k) {
result[i][j] += A[i][k] * B[k][j];
}
}
}
return result;
}
int main() {
cin >> n >> d;
vector<vector<long long>> Q(n, vector<long long>(d));
for (size_t i = 0; i < n; i++)
{
for (size_t j = 0; j < d; j++)
{
cin >> Q[i][j];
}
}
vector<vector<long long>> K(d, vector<long long>(n));
for (size_t i = 0; i < n; i++)
{
for (size_t j = 0; j < d; j++)
{
cin >> K[j][i];
}
}
vector<vector<long long>> V(n, vector<long long>(d));
for (size_t i = 0; i < n; i++)
{
for (size_t j = 0; j < d; j++)
{
cin >> V[i][j];
}
}
vector<long long>W(n);
for (size_t i = 0; i < n; i++)
{
cin >> W[i];
}
vector<vector<long long>> a1 = multiplyMatrices(K, V);
vector<vector<long long>> a2 = multiplyMatrices(Q, a1);
for (size_t i = 0; i < n; i++)
{
for (size_t j = 0; j < d; j++)
{
a2[i][j] *= W[i];
}
}
for (size_t i = 0; i < n; i++)
{
for (size_t j = 0; j < d; j++)
{
cout << a2[i][j] << " ";
}
cout << endl;
}
return 0;
system("pause");
}