#pragma comment(linker, "/STACK:1024000000,1024000000") #include<iostream> #include<cstdio> #include<cmath> #include<string> #include<queue> #include<algorithm> #include<stack> #include<cstring> #include<vector> #include<list> #include<bitset> #include<set> #include<map> #include<time.h> using namespace std; #define LL long long #define bug(x) cout<<"bug"<<x<<endl; const int N=1e3+10,M=1e6+10,inf=1e9+10; const LL INF=1e18+10,mod=1e9+7; const double eps=(1e-8),pi=(4*atan(1.0)); LL a[N][N]; priority_queue<LL>col,row; LL r[M],c[M]; int main() { int n,m,k,p; scanf("%d%d%d%d",&n,&m,&k,&p); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%lld",&a[i][j]); for(int i=1;i<=n;i++) { int r=0; for(int j=1;j<=m;j++) r+=a[i][j]; row.push(r); } for(int j=1;j<=m;j++) { int c=0; for(int i=1;i<=n;i++) c+=a[i][j]; col.push(c); } for(int i=1;i<=k;i++) { LL x=row.top(); row.pop(); r[i]=r[i-1]+x; x-=m*p; row.push(x); } for(int i=1;i<=k;i++) { LL x=col.top(); col.pop(); c[i]=c[i-1]+x; x-=n*p; col.push(x); } LL ans=-INF; for(int i=0;i<=k;i++) ans=max(ans,r[i]+c[k-i]-1LL*p*i*(k-i)); printf("%lld ",ans); return 0; }