#include <math.h>
#include <vector>
using namespace std;
class ImageFilter{
public:
vector <double> filter(int W, int H, int K, vector <double> red, vector <double> green, vector <double> blue, vector <double> A, vector <double> B, double C){
vector<double> ret(red.size()*3);
for(int i = 0; i<red.size()/ W; i++){//row
for(int j = 0; j<W; j++){//column
ret[i*W+j] = C;
ret[W*H+i*W+j] = C;
ret[2*W*H+i*W+j] = C;
for(int di = -K; di<=K; di++){
for(int dj = -K; dj<=K; dj++){
int ii = i + di;
int jj = j + dj;
int k = (di + K) * (K+K+1) + (dj + K);
if(ii >=0 && jj >= 0 && ii < H && jj < W){
ret[i*W+j] += red[ii*W+jj] * B[k];
ret[W*H+i*W+j] += green[ii*W+jj] * B[k];
ret[2*W*H+i*W+j] += blue[ii*W+jj] * B[k];
for(int di2 = -K; di2<=K; di2++){
for(int dj2 = -K; dj2<=K; dj2++){
int l = (di2 + K) * (K+K+1) + (dj2 + K);
if(A[k*(K+K+1)*(K+K+1) + l] == 0)continue;
int ii2 = i + di2;
int jj2 = j + dj2;
if(ii2 >=0 && jj2 >= 0 && ii2 < H && jj2 < W){
ret[i*W+j] += red[ii*W+jj] * red[ii2*W+jj2] * A[k*B.size() + l];
ret[W*H+i*W+j] += green[ii*W+jj] * green[ii2*W+jj2]* A[k*B.size() + l];
ret[2*W*H+i*W+j] += blue[ii*W+jj] * blue[ii2*W+jj2]* A[k*B.size() + l];
}
}
}
}
}
}
}
}
return ret;
}
};
int main(){
int W, H, K, i;
vector<double> red, green, blue, A, B;
double C;
double d;
scanf("%d%d%d",&W,&H,&K);
for(i = 0; i<W*H; i++){
scanf("%lf",&d);
red.push_back(d);
}
for(i = 0; i<W*H; i++){
scanf("%lf",&d);
green.push_back(d);
}
for(i = 0; i<W*H; i++){
scanf("%lf",&d);
blue.push_back(d);
}
for(i = 0; i<(K+K+1)*(K+K+1)*(K+K+1)*(K+K+1); i++){
scanf("%lf",&d);
A.push_back(d);
}
for(i = 0; i<(K+K+1)*(K+K+1); i++){
scanf("%lf",&d);
B.push_back(d);
}
scanf("%lf",&C);
ImageFilter im;
fprintf(stderr,"START\n");
fflush(stderr);
vector<double> op = im.filter(W,H,K,red,green,blue,A,B,C);
fprintf(stderr,"DONE\n");
fflush(stderr);
for(i = 0; i<op.size(); i++){
printf("%lf\n",op[i]);
}
fflush(stdout);
}