#include <bits/stdc++.h>
using namespace std;
const int N = 5010;
int t[N][N], tmax[N][N], tmax2[N][N], tmin[N][N], tmin2[N][N];
int q[N];
int a, b, n;
inline void read(int &x);
int main()
{
read(a), read(b), read(n);
for(int i = 1; i <= a; i++)
for(int j = 1; j <= b; j++)
read(t[i][j]);
for(int i = 1; i <= a; i++)
{
int hh = 0, tt = -1;
for(int j = 1; j <= b; j++)
{
while(hh <= tt && q[hh] < j - n + 1) hh++;
while(hh <= tt && t[i][q[hh]] <= t[i][j]) tt--;
q[++tt] = j;
tmax[i][j] = t[i][q[hh]];
}
}
for(int i = n; i <= b; i++)
{
int hh = 0, tt = -1;
for(int j = 1; j <= a; j++)
{
while(hh <= tt && q[hh] < j - n + 1) hh++;
while(hh <= tt && tmax[q[tt]][i] <= tmax[j][i]) tt--;
q[++tt] = j;
tmax2[j][i] = tmax[q[hh]][i];
}
}
for(int i = 1; i <= a; i++)
{
int hh = 0, tt = -1;
for(int j = 1; j <= b; j++)
{
while(hh <= tt && q[hh] < j - n + 1) hh++;
while(hh <= tt && t[i][q[tt]] >= t[i][j]) tt--;
q[++tt] = j;
tmin[i][j] = t[i][q[hh]];
}
}
for(int i = n; i <= b; i++)
{
int hh = 0, tt = -1;
for(int j = 1; j <= a; j++)
{
while(hh <= tt && q[hh] < j - n + 1) hh++;
while(hh <= tt && tmin[q[tt]][i] >= tmin[j][i]) tt--;
q[++tt] = j;
tmin2[j][i] = tmin[q[hh]][i];
}
}
int res = INT_MAX;
for(int i = n; i <= a; i++)
for(int j = n; j <= b; j++)
res = min(res, tmax2[i][j] - tmin2[i][j]);
printf("%d\n", res);
return 0;
}
void read(int &x)
{
x = 0;
int f = 1;
char ch = getchar();
while(ch < '0' || ch > '9')
{
if(ch == '-')
f = -1;
ch = getchar();
}
while(ch >= '0' && ch <= '9')
{
x = x * 10 + ch - '0';
ch = getchar();
}
x *= f;
}