#include <bits/stdc++.h>
using namespace std;
const int MAX = 1024;
int G[MAX][MAX], m, n, k, p;
long long sum[MAX << 1], X, Y;
long long f[1 << 20], g[1 << 20];
int main() {
  scanf("%d %d %d %d", &m, &n, &k, &p);
  for (int i = 0; i < (m); i++)
    for (int j = 0; j < (n); j++) scanf("%d", &G[i][j]);
  for (int i = 0; i < (m); i++)
    for (int j = 0; j < (n); j++) sum[i] += G[i][j], sum[j + m] += G[i][j];
  multiset<long long> row, col;
  for (int i = 0; i < (m); i++) row.insert(sum[i]);
  for (int i = 0; i < (n); i++) col.insert(sum[i + m]);
  for (int i = 0; i < (k); i++) {
    long long val = *row.rbegin();
    f[i + 1] = val + f[i];
    row.erase(row.find(val));
    row.insert(val - n * 1LL * p);
  }
  for (int i = 0; i < (k); i++) {
    long long val = *col.rbegin();
    g[i + 1] = val + g[i];
    col.erase(col.find(val));
    col.insert(val - m * 1LL * p);
  }
  long long ans = LLONG_MIN;
  for (int i = 0; i < (k + 1); i++) {
    ans = max(ans, f[i] + g[k - i] - (k - i) * 1LL * i * 1LL * p);
  }
  cout << ans << endl;
  return 0;
}
