/*
TASK: tre
LANG: C++
*/
#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;

 int N,K,L,D;
 struct{
	 int pl[100][10001];
	 char can[10001];
       }gold;
 void inp()
 {cin>>N>>K>>L>>D;
  for(int i=0; i<D; i++)
   for(int j=0; j<L; j++)
    cin>>gold.pl[i][j];
 }


int cmp(const void *a, const void *b)
{
 int *p=(int *)a;
 int *q=(int *)b;
 if(p>q) return 1;
 if(p<q) return -1;
 return 0;
}

/* int make1()
{  for(int i=0; i<D; i++)


   {qsort(gold.pl[i][gold.can[i]],10001,sizeof(10001*(int)),cmp(gold.pl[i][gold.can[i]],gold.pl[i+1][gold.can[i]]);
   }
}*/



int dig()
{for(int d=1; d<=K; d++)
 {gold.pl[0][0];
  gold.can[0]= gold.can[0]+1;
  for(int i=1; i<=L; i++)
  {if(gold.pl[0][gold.can[0]]>gold.pl[i][gold.can[i]])
   {int remember=gold.pl[0][gold.can[0]];
    for(int j=1; j<=i; j++)
     {gold.pl[j][gold.can[j-1]]=gold.pl[j][gold.can[j]];
     }
     gold.pl[i][gold.can[i]]=remember;
    }
   }
  }
}


int main()
{inp();
 dig();


    return 0;
}
