// Problem: D. Explorer Space
// Contest: Codeforces - Contest 2050 and Codeforces Round #718 (Div. 1 + Div. 2)
// URL: https://codeforces.com/contest/1517/problem/D
// Memory Limit: 256 MB
// Time Limit: 2000 ms
// FishingRod
#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
typedef long long LL;
typedef pair<int,int> PII;
//#define MULINPUT
/*DATA & KEY
*/
int T;
int n,m,k;
const int N=505;
map<PII,int>g;//用map不用g[N*N][N*N],不然爆空间
LL f[N][N][50];
int get_id(int x,int y){return (x-1)*m+y;}
bool check(int x,int y){if(x>=1&&x<=n&&y>=1&&y<=m)return 1;return 0;}
LL work(int x,int y,int s)//递归记忆化求解最值,这个写得比较少,记录一下
{
if(f[x][y][s])return f[x][y][s];
if(s==0)return f[x][y][0];
LL tmp=1e18+7;//先设置一个临时变量极大值
int u=get_id(x,y);
if(check(x-1,y))tmp=min(tmp,work(x-1,y,s-1)+g[{u,get_id(x-1,y)}]);
if(check(x+1,y))tmp=min(tmp,work(x+1,y,s-1)+g[{u,get_id(x+1,y)}]);
if(check(x,y-1))tmp=min(tmp,work(x,y-1,s-1)+g[{u,get_id(x,y-1)}]);
if(check(x,y+1))tmp=min(tmp,work(x,y+1,s-1)+g[{u,get_id(x,y+1)}]);
return f[x][y][s]=tmp;//把临时变量作为答案,而不是直接f[x][y][s]放到min里
}
void solve(int C)
{
//NEW DATA CLEAN
//NOTE!!!
cin>>n>>m>>k;
for(int i=1;i<=n;i++)
for(int j=1;j<m;j++)
{
LL w;cin>>w;
int u=get_id(i,j),v=get_id(i,j+1);//权不是点,而是边,可以二维转一维
g[{u,v}]=g[{v,u}]=w;
}
for(int i=1;i<n;i++)
for(int j=1;j<=m;j++)
{
LL w;cin>>w;
int u=get_id(i,j),v=get_id(i+1,j);
g[{u,v}]=g[{v,u}]=w;
}
if(k&1)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
printf("-1 ");
if(j==m)puts("");
}
return;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
cout<<2*work(i,j,k/2)<<" ";
if(j==m)puts("");
}
}
int main()
{
#ifdef MULINPUT
scanf("%d",&T);
for(int i=1;i<=T;i++)solve(i);
#else
solve(1);
#endif
return 0;
}