#include <bits/stdc++.h>
#include <iomanip>      // std::setprecision

#define ll long long
const long modulo=1000000007;

using namespace std;



int ctoi(char c) {return c-'0';}



int compare(pair <int,pair<int,int>> one, pair <int,pair<int,int>> two){
	if(one.first<two.first) return 1;
	return 0;
}

ll power(ll a, ll b){
ll res=1;
while(b!=0){

if(b%2==1){
	res*=a;
	//res%=modulo;
}
a*=a;
//a%=modulo;
b/=2;
}
return res;
}

int dp[501][501][21]={0};
int n,m,k;
int dn[501][501];
int rightt[501][501];

int explore(int q,int i,int j){

if(q==0){ return 0;
}

if(dp[i][j][q]!=0){
	//cout<<"1";
	return dp[i][j][q];
}
 int ans = dp[i][j][k];
ans=INT_MAX;

	if(j<m-1) ans=min(ans,explore(q-2,i,j+1) + 2*dn[i][j]);
	if(j>0)ans=min(ans,explore(q-2,i,j-1) +2*dn[i][j-1]);
	if(i<n-1)ans=min(ans,explore(q-2,i+1,j) +2*rightt[i][j]);
	if(i>0)ans=min(ans,explore(q-2,i-1,j) +2*rightt[i-1][j]);


	//ans=min(min(explore(d,r,n-2,i,j-1,dn,right) +2*dn[i][y0], explore(d,r,n-2,i,j+1,dn,right) +2*dn[i][y]),min(explore(d,r,n-2,i-1,j,dn,right)+2*right[x0][j], explore(d,r,n-2,i+1,j,dn,right)+2*right[x][j]));
	dp[i][j][q]=ans;
	return ans;



}


void solve()
{

cin>>n>>m>>k;



if(k%2!=0){

for(int i=0;i<n;i++){
	for(int j=0;j<m;j++){
		
		cout<<"-1"<<" ";
	}
	cout<<endl;
}
return;
}

for(int i=0;i<n;i++){
	for(int j=0;j<m-1;j++){
		cin>>dn[i][j];
	}

}

for(int i=0;i<n-1;i++){
	for(int j=0;j<m;j++){
		cin>>rightt[i][j];
	}

}

int ans[501][501];

for(int i=0;i<n;i++){
	for(int j=0;j<m;j++){
		ans[i][j]=explore(k,i,j);
		cout<<ans[i][j]<<" ";
	}
	cout<<endl;
}



}







int main() {

		#ifndef ONLINE_JUDGE
	    freopen("input.txt", "r", stdin);
	    freopen("output.txt", "w", stdout);
		#endif
	ios_base::sync_with_stdio(false); 
    cin.tie(NULL);  	


ll t=1;//cin>>t;
while(t--){

solve();

}


return 0;
}



//rememberhere