#include<bits/stdc++.h>
#define int long long
using namespace std;
int a,b,n,ans=1e10;
int f[1005][1005];
int ma[1005][1005],mi[1005][1005];
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin>>a>>b>>n;
for(int i=1;i<=a;i++) for(int j=1;j<=b;j++) cin>>f[i][j];
for(int i=1;i<=a;i++){
deque<int>mx,mm;
for(int j=1;j<=b;j++){
if(!mx.empty()&&mx.front()==j-n) mx.pop_front();
while(!mx.empty()&&f[i][mx.back()]<=f[i][j]) mx.pop_back();
mx.push_back(j);
if(j>=n) ma[i][j]=f[i][mx.front()];
if(!mm.empty()&&mm.front()==j-n) mm.pop_front();
while(!mm.empty()&&f[i][mm.back()]>=f[i][j]) mm.pop_back();
mm.push_back(j);
if(j>=n) mi[i][j]=f[i][mm.front()];
}
}
//for(int i=1;i<=a;i++) for(int j=n;j<=b;j++) cout<<ma[i][j]<<(j==b?'\n':' ');
//for(int i=1;i<=a;i++) for(int j=n;j<=b;j++) cout<<mi[i][j]<<(j==b?'\n':' ');
for(int j=n;j<=b;j++){
deque<int>mx,mm;
for(int i=1;i<=a;i++){
if(!mx.empty()&&mx.front()==i-n) mx.pop_front();
while(!mx.empty()&&ma[mx.front()][j]<=ma[i][j]) mx.pop_back();
mx.push_back(i);
if(!mm.empty()&&mm.front()==i-n) mm.pop_front();
while(!mm.empty()&&mi[mm.front()][j]>=mi[i][j]) mm.pop_back();
mm.push_back(i);
if(i>=n){
ans=min(ans,ma[mx.front()][j]-mi[mm.front()][j]);
//cout<<ma[mx.front()][j]<<' '<<mi[mm.front()][j]<<' '<<ans<<'\n';
}
}
}
cout<<ans;
return 0;
}
马蜂良好,将就着看吧