#include <bits/stdc++.h>
using namespace std;
long long int r[1001000], c[1000100];
int a[1010][1010];
long long int rs[1010] = {0}, cs[1010] = {0};
set<long long int> s;
map<long long int, long long int> m;
void add(long long int x) {
  s.insert(x);
  m[x]++;
}
void del(long long int x) {
  m[x]--;
  if (m[x] == 0) {
    s.erase(x);
  }
}
long long int getMax() { return *s.rbegin(); }
void cl() {
  s.clear();
  m.clear();
}
int main() {
  int m, n, k, p;
  cin >> m >> n >> k >> p;
  for (int i = 1; i <= m; i++)
    for (int j = 1; j <= n; j++) scanf("%d", &a[i][j]);
  r[0] = 0;
  for (int i = 1; i <= m; i++) {
    long long int res = 0;
    for (int j = 1; j <= n; j++) res += a[i][j];
    rs[i] = res;
    add(rs[i]);
  }
  long long int minus = n * p;
  long long int ans = 0;
  for (int i = 1; i <= k; i++) {
    long long int f = getMax();
    ans += f;
    r[i] = ans;
    del(f);
    add(f - minus);
  }
  c[0] = 0;
  for (int i = 1; i <= m; i++) {
    for (int j = 1; j <= n; j++) {
      cs[j] += a[i][j];
    }
  }
  minus = m * p;
  ans = 0;
  cl();
  for (int j = 1; j <= n; j++) add(cs[j]);
  for (int var = 1; var <= k; var++) {
    long long int f = getMax();
    ans += f;
    c[var] = ans;
    del(f);
    add(f - minus);
  }
  long long int res = c[k];
  for (long long int i = 1; i <= k; i++) {
    res = max(res, r[i] + c[k - i] - (i * (k - i) * p));
  }
  cout << res << endl;
}
