#include <bits/stdc++.h>
using namespace std;
struct p{
int id;
int num;
}m[1005][1005];
p ma[1005][1005],mi[1005][1005];
int mma[1005][1005],mmi[1005][1005];
int ma1,mi1,ma2,mi2;int s=2147483647;
void addmi(int x,int i)
{
mi[i][++mi1].num=x;
mi[i][mi1].id=i;
}
void addma(int x,int i)
{
ma[i][++ma1].num=x;
ma[i][ma1].id=i;
}
void addmmi(int x,int j)
{
mmi[++mi2][j]=x;
}
void addmma(int x,int j)
{
mma[++ma2][j]=x;
}
deque <p> q;
int main()
{
int a,b,n;
scanf("%d%d%d",&a,&b,&n);
for(int i=1;i<=a;i++)
for(int j=1;j<=b;j++)
{
scanf("%d",&m[i][j].num);
m[i][j].id=j;
}
for(int i=1;i<=a;i++)
{
q.clear();mi1=0;
for(int j=1;j<=b;j++)
{
while(!q.empty()&&q.front().id<=j-n)q.pop_front();
while(!q.empty()&&q.back().num>=m[i][j].num)q.pop_back();
q.push_back(m[i][j]);
if(j>=n)addmi(q.front().num,i);
}
}
for(int i=1;i<=a;i++)
{
q.clear();ma1=0;
for(int j=1;j<=b;j++)
{
while(!q.empty()&&q.front().id<=j-n)q.pop_front();
while(!q.empty()&&q.back().num<=m[i][j].num)q.pop_back();
q.push_back(m[i][j]);
if(j>=n)addma(q.front().num,i);
}
}
for(int i=1;i<=mi1;i++)
{
q.clear();mi2=0;
for(int j=1;j<=a;j++)
{
while(!q.empty()&&q.front().id<=j-n)q.pop_front();
while(!q.empty()&&q.front().num>=mi[j][i].num)q.pop_back();
q.push_back(mi[j][i]);
if(j>=n)addmmi(q.front().num,i);
}
}
for(int i=1;i<=ma1;i++)
{
q.clear();ma2=0;
for(int j=1;j<=a;j++)
{
while(!q.empty()&&q.front().id<=j-n)q.pop_front();
while(!q.empty()&&q.front().num<=ma[j][i].num)q.pop_back();
q.push_back(ma[j][i]);
if(j>=n)addmma(q.front().num,i);
}
}
for(int i=1;i<=ma2;i++)
for(int j=1;j<=ma1;j++)
s=min(s,mma[i][j]-mmi[i][j]);
printf("%d",s);
return 0;
}