#include<bits/stdc++.h>
#define int long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int Max=1050;
int n,m,k,a[Max][Max];
int amx[Max][Max],ami[Max][Max];
int bmx[Max][Max],bmi[Max][Max];
int qmx[Max],qmi[Max],tmx[Max],tmi[Max];
signed main(){
cin>>n>>m>>k;
rep(i,1,n){
memset(qmx,0,sizeof qmx);
memset(qmi,0,sizeof qmi);
memset(tmx,0,sizeof tmx);
memset(tmi,0,sizeof tmi);
int lmx=1,rmx=0,lmi=0,rmi=0;
rep(j,1,m){
cin>>a[i][j];
while(tmx[lmx]+k<=j&&lmx<=rmx) lmx++;
while(tmx[lmi]+k<=j&&lmi<=rmi) lmi++;
while(lmx<=rmx&&qmx[rmx]<a[i][j]) rmx--;
while(lmi<=rmi&&qmi[rmi]>a[i][j]) rmi--;
qmx[++rmx]=qmi[++rmi]=a[i][j];
tmx[rmx]=tmi[rmi]=j;
if(j>=k) amx[i][j-k+1]=qmx[lmx],ami[i][j-k+1]=qmi[lmi];
}
}
rep(j,1,m-k+1){
memset(qmx,0,sizeof qmx);
memset(qmi,0,sizeof qmi);
memset(tmx,0,sizeof tmx);
memset(tmi,0,sizeof tmi);
int lmx=1,rmx=0,lmi=0,rmi=0;
rep(i,1,n){
while(tmx[lmx]+k<=i&&lmx<=rmx) lmx++;
while(tmi[lmi]+k<=i&&lmi<=rmi) lmi++;
while(lmx<=rmx&&qmx[rmx]<amx[i][j]) rmx--;
while(lmi<=rmi&&qmi[rmi]>ami[i][j]) rmi--;
qmx[++rmx]=amx[i][j],qmi[++rmi]=ami[i][j];
tmx[rmx]=tmi[rmi]=i;
if(i>=k) bmx[i-k+1][j]=qmx[lmx],bmi[i-k+1][j]=qmi[lmi];
}
}
int ans=INT_MAX;
rep(i,1,n-k+1)
rep(j,1,m-k+1)
ans=min(bmx[i][j]-bmi[i][j],ans);
cout<<ans;
return 0;
}