#include<iostream>
#include<algorithm>
using namespace std;
int n,m,k,w[1005][1005],rmin[1005][1005],rmax[1005][1005],q[1005];
void gmin(int a[],int b[],int tot){
int h=0,t=-1,i;
for(i=1;i<=tot;i++){
if(h<=t&&q[h]<=i-k)h++;
while(h<=t&&a[q[t]]>=a[i])t--;
q[++t]=i,b[i]=a[q[h]];
}
}
void gmax(int a[],int b[],int tot)
{
int h=0,t=-1,i;
for(i=1;i<=tot;i++){
if(h<=t&&q[h]<=i-k)h++;
while(h<=t&&a[q[t]]<=a[i])t--;
q[++t]=i,b[i]=a[q[h]];
}
}
int main()
{
int i,j,ans=1e9,a[1005],b[1005],c[1005];
scanf("%d%d%d",&n,&m,&k);
for(i=1;i<=n;i++)for(j=1;j<=m;j++)scanf("%d",&w[i][j]);
for(i=1;i<=n;i++)gmin(w[i],rmin[i],m),gmax(w[i],rmax[i],m);
for(i=k;i<=m;i++){
for(j=1;j<=n;j++)a[j]=rmin[j][i];
gmin(a,b,n);
for(j=1;j<=n;j++)a[j]=rmax[j][i];
gmax(a,c,n);
for(j=k;j<=n;j++)ans=min(ans,c[j]-b[j]);
}
printf("%d\n",ans);
return 0;
}