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

using namespace std;

//int a[10002][10002];
int N,K,L,D;
int S;
stack <int> q[10002];int T[10002];

void init(){
     //int L,D;
     int cut[10002]={0};/// !!!!!!!!
     cin>>N>>K>>L>>D;
     for(int x=1;x<=L;x++){
             T[x]=x;
             for(int y=1;y<=D;y++){
                     int a;
                     cin>>a;
                     q[y].push(a);
                     cut[y]+=a;
                     }
             }
     for(int i=1;i<=N;i++){
            queue <int> w;
            while(q[i].size()){w.push(q[i].top());q[i].pop();}
            while(w.size()){q[i].push(w.front());w.pop();}
            }
     for(int x=1;x<=L;x++)
             if(cut[x]<=0)     T[x]=0;
     
     }   

int main(){
    init();
    /*cout<<N<<K<<L<<D<<endl;
    for(int i=1;i<=N;i++){
            stack <int> w;
            while(q[i].size()){cout<<q[i].top();w.push(q[i].top());q[i].pop();}
            while(w.size()){q[i].push(w.top());w.pop();}
            cout<<endl;
            }
    cout<<endl;
    for(int i=1;i<=L;i++)
            cout<<T[i]<<" ";
    cout<<endl;
    */
    int i=K,j=1;
    S=0;
    while(i>0&&j<=N){
            int max=q[1].top();
            int num=1;
            for(int x=2;x<=L;x++)
            if(T[x]!=0)
                if(q[x].top()>max){max=q[x].top();num=x;}
            S+=max;
            q[num].pop();
            i--;
            //cout<<S<<endl;
            if(max>0)  j++;
    }
    cout<<S<<endl;
    //system ("pause");
    return 0;
}
    
