#include <bits/stdc++.h>
using namespace std;
int n,m,k,head=1,front,tail=1,back,ans=INT_MAX;
int a[1001][1001],q[1001],q1[1001];
int x[1001][1001],y[1001][1001];
int z[1001][1001],z1[1001][1001];
int main(){
cin>>n>>m>>k;
for (int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
for(int i=1;i<=n;i++){
q[1]=1;
head=tail=1;
for(int j=2;j<=m;j++){
if(j-q[head]>k)head++;
while(head<=tail&&(a[i][q[tail]]<a[i][j]))tail--;
q[++tail]=j;
if(j>=k)x[i][++back]=a[i][q[head]];
}
}
for(int i=1;i<=back;i++){
q1[1]=1;
head=tail=1;
for(int j=2;j<=n;j++){
if(j-q[head]>k)head++;
while(head<=tail&&(a[q[tail]][i]<a[j][i]))tail--;
q[++tail]=j;
if(j>=k)y[++front][i]=a[q[head]][i];
}
}
front=back=0;
for(int i=1;i<=n;i++){
q[1]=1;
head=tail=1;
for(int j=2;j<=m;j++){
if(j-q[head]>k)head++;
while(head<=tail&&(a[i][q[tail]]>a[i][j]))tail--;
q[++tail]=j;
if(j>=k)z[i][++back]=a[i][q[head]];
}
}
for(int i=1;i<=back;i++){
q1[1]=1;
head=tail=1;
for(int j=2;j<=n;j++){
if(j-q[head]>k)head++;
while(head<=tail&&(a[q[tail]][i]>a[j][i]))tail--;
q[++tail]=j;
if(j>=k)z1[++front][i]=a[q[head]][i];
}
}
for(int i=1;i<=front;i++)
for(int j=1;j<=back;j++){
if(y[i][j]-z1[i][j]<ans)ans=y[i][j]-z1[i][j];
}
cout<<ans;
return 0;
}