RT
#include<bits/stdc++.h>
using namespace std;
long long n,m,t,N,V,v[10010],w[10010],s;
long long _v[10010],_w[10010],tot,f[10010];
template<typename T>
inline void read(T &x)
{
x=0;
register int f=1;
register char c=getchar();
while(c<'0'||c>'9')
{
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9')
{
x=(x<<3)+(x<<1)+(c^48);
c=getchar();
}
x*=f;
}
template<typename T>
void write(T x)
{
if(x<0)
{
x=~x+1;
putchar('-');
}
if(x>=10) write(x/10);
putchar(x%10^48);
}
int main()
{
read(n);read(m);read(t);read(V);
V=min(t,V-1);N=n*m;
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
{
v[i*m-m+j]=2*(i+j);
read(w[i*m-m+j]);
}
for(int i=1;i<=N;++i)
{
read(s);
for(int j=1;j<=s;j<<=1)
{
++tot;
_v[tot]=j*v[i];
_w[tot]=j*w[i];
s-=j;
}
if(s>0)
{
++tot;
_v[tot]=s*v[i];
_w[tot]=s*w[i];
}
}
for(int i=1;i<=tot;++i)
for(int j=V;j>=_v[i];--j)
f[j]=max(f[j],f[j-_v[i]]+_w[i]);
write(f[V]);
return 0;
}