/*
TASK:tre
LANG:C++
*/
#include <iostream>

using namespace std;

int N,K,L,D;
int A[100][10000];
int front [10000];

int maxs, s = 0;

void solve (int i)
{
     int mx = -10000;
     if (i <= K)
     {
          int j;
          for (j = 0; j < L; j++)
              if (mx < A[front[j]][j]) mx = A[front[j]][j];
          for (j = 0; j < L; j++)         
              if (A[front[j]][j] == mx && front[j] < D)
              {
                 s += A[front[j]][j];
                 front[j]++;
                 solve(i++);
                 front[j]--;
                 s -= A[front[j]][j];              
              }
     }
     if (s > maxs) maxs = s;
}
int main ()
{
    int i, j;
    cin >> N >> K >> L >> D;
    for (i = 0; i < D; i++)
    {
        for (j = 0; j < L; j++)
            cin >> A[i][j];
        front [i] = 0;
    }
    solve (0);
    cout << maxs << '\n';
    return 0;   
}
    
            
    
        
