#include<stdio.h>
#include<algorithm>
using namespace std;
int dp[31][51][6];
int s[15][30];
int t[15][30];
int main(){
	int a,b,c,d;
	while(scanf("%d%d%d%d",&a,&b,&c,&d),a+b+c+d){
		for(int i=0;i<a;i++)
			for(int j=0;j<b;j++)
				scanf("%d",&s[i][j]);
		for(int i=0;i<a;i++)
			for(int j=0;j<b;j++)
				scanf("%d",&t[i][j]);
		for(int i=0;i<31;i++)
				for(int k=0;k<51;k++)
					for(int l=0;l<6;l++)
						dp[i][k][l]=-99999999;
		dp[0][0][0]=0;
		for(int i=0;i<b;i++){
			for(int j=0;j<=c;j++){
				for(int k=0;k<=d;k++){
					dp[i+1][j][k]=max(dp[i+1][j][k],dp[i][j][k]);
					for(int l=0;l<a;l++){
						if(s[l][i]==0)continue;
						int cost=0;
						int W=0;
						for(int m=l;m<a;m++){
							if(s[m][i]==0)break;
							if(k==d&&l!=m)break;
							cost+=t[m][i];
							W+=s[m][i];
							if(l==m&&j+cost<=c){
								dp[i+1][j+cost][k]=max(dp[i+1][j+cost][k],dp[i][j][k]+W);
							}
							if(l!=m&&j+cost<=c&&k<d){
								dp[i+1][j+cost][k+1]=max(dp[i+1][j+cost][k+1],dp[i][j][k]+W);
							}
						}
					}
				}
			}
		}
		int ret=0;
		for(int i=0;i<51;i++)
			for(int j=0;j<6;j++)
				ret=max(ret,dp[b][i][j]);
		printf("%d\n",ret);
	}
}