#include <fstream>
#include <algorithm>
#include <string.h>
#define sum first
#define poz second
using namespace std;
ifstream f("elimin.in");
ofstream g("elimin.out");
int n, m, l, c, x, s_col[7300], v[20];
long long sumMax, newSum;
short a[20][7300];
pair <int, int> s[7300];
void aflu_solutie()
{
newSum = 0;
memset(s, 0, sizeof(s));
for(int i = 1; i <= l; ++i)
for(int j = 1; j <= m; ++j){
s[j].sum += a[v[i]][j];
s[j].poz = j;
}
sort(s + 1, s + m + 1);
for(int i = 1; i <= m - c; ++i)
newSum += s_col[s[i].poz] - s[i].sum;
if(newSum > sumMax) sumMax = newSum;
}
int valid(int k){
for(int i = 1; i < k; i++)
if(v[i] == v[k])return 0;
return 1;
}
void make_bkt(int k){
while(k > 0){
if(v[k] < n){
v[k]++;
if(valid(k))
if(k == l)aflu_solutie();
else {
k++;
v[k] = v[k - 1];
}
}
else k--;
}
}
int main()
{
f >> n >> m >> l >> c;
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= m; ++j){
f >> x;
if(n <= m){
a[i][j] = x;
s_col[j] += x;
}
else {
a[j][i] = x;
s_col[i] += x;
}
}
if(n > m) swap(n ,m), swap(l, c);
for(int i = 1; i <= l; ++i)
v[i] = i;
aflu_solutie();
make_bkt(l);
g << sumMax;
return 0;
}