#include<bits/stdc++.h>
using namespace std;
int ma[1001][1001][8],mi[1001][1001][8],n,logn;
int query(int x,int y){
int xx=x+n,yy=y+n,k=log2(n);
return max(max(ma[x][y][k],ma[xx-(1<<k)+1][yy-(1<<k)+1][k]),max(ma[xx-(1<<k)+1][y][k],ma[x][yy-(1<<k)+1][k]))-min(min(mi[x][y][k],mi[xx-(1<<k)+1][yy-(1<<k)+1][k]),min(mi[xx-(1<<k)+1][y][k],mi[x][yy-(1<<k)+1][k]));
}
int main(){
int a,b,num,ans=2147483647;cin>>a>>b>>n;
for(int i=1;i<=a;i++){
for(int j=1;j<=b;j++){
scanf("%d",&num);ma[i][j][0]=mi[i][j][0]=num;
}
}
for(int k=1;(1<<k)<=n;k++){
for(int i=1;i+(1<<k)-1<=a;i++){
for(int j=1;j+(1<<k)-1<=b;j++){
ma[i][j][k]=max(max(ma[i+(1<<(k-1))][j][k-1],ma[i][j+(1<<(k-1))][k-1]),max(ma[i][j][k-1],ma[i+(1<<(k-1))][j+(1<<(k-1))][k-1]));
mi[i][j][k]=min(min(mi[i+(1<<(k-1))][j][k-1],mi[i][j+(1<<(k-1))][k-1]),min(mi[i][j][k-1],mi[i+(1<<(k-1))][j+(1<<(k-1))][k-1]));
}
}
}
for(int i=1;i+n-1<=a;i++){
for(int j=1;j+n-1<=b;j++){
ans=min(ans,query(i,j));
}
}cout<<ans;
return 0;
}