#include<iostream>
using namespace std;
int dp[32][52][10],C,D,W,X,e[16][32],f[16][32];
int solve(int d,int w,int p){
	if(w>W)return -999999999;
	if(p>X)return -999999999;
	if(d==D)return 0;
	if(dp[d][w][p]>=0)return dp[d][w][p];
	int maxn=solve(d+1,w,p);
	for(int i=0;i<C;i++){
		for(int j=i;j<C;j++){
			bool OK=false;for(int k=i;k<=j;k++){if(e[k][d]==0)OK=true;}
			if(OK==true)continue;
			int s=0;for(int k=i;k<=j;k++)s+=e[k][d];
			int t=0;for(int k=i;k<=j;k++)t+=f[k][d];
			int u=0;if(j-i>=1)u=1;
			maxn=max(maxn,solve(d+1,w+t,p+u)+s);
		}
	}
	dp[d][w][p]=maxn;
	return maxn;
}
int main(){
	while(true){
		cin>>C>>D>>W>>X;if(C+D+W+X==0)break;
		for(int i=0;i<=D;i++){for(int j=0;j<=W;j++){for(int k=0;k<=X;k++)dp[i][j][k]=(-1LL<<30);}}
		for(int i=0;i<C;i++){for(int j=0;j<D;j++)cin>>e[i][j];}
		for(int i=0;i<C;i++){for(int j=0;j<D;j++)cin>>f[i][j];}
		cout<<solve(0,0,0)<<endl;
	}
}