思路:贪贪贪!
ll r[N], c[N];
multiset<ll> str, stc;
int main()
{
//freopen("in.txt", "r", stdin);
int n, m, k, p,x;
while (cin >> n >> m >> k >> p)
{
f(i, 1, n)
{
f(j, 1, m)//记录每行每列的和
{
scanf("%d", &x);
r[i] += x;
c[j] += x;
}
}
f(i, 1, n)str.insert(r[i]);
f(i, 1, m)stc.insert(c[i]);
//greedy优先选择和大的行,列
vector<ll> v1, v2;//记录[0,k]种选择,再枚举
v1.emplace_back(0), v2.emplace_back(0);
f(i, 1, k)
{
auto r = str.end(), c = stc.end();
r--, c--;
v1.emplace_back(v1[i-1]+*r);
v2.emplace_back(v2[i-1]+*c);
str.insert(*r - m * p);
stc.insert(*c - n * p);
str.erase(r), stc.erase(c);
}
//for (auto i : v1)cout << i << endl;
//for (auto i : v2)cout << i << endl;
ll ans = -2e18;
f(i, 0, k)//要减去行列的交点
{
ans = max(ans, v1[i] + v2[k - i] -(ll)i*(k - i)*p);
}
cout << ans << endl;
}
return 0;
}