#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll a, b, n, ans = INT_MAX, v[1001][1001], minn[1001][1001], maxn[1001][1001];
deque<ll> qx[1001];
int main() {
scanf("%lld%lld%lld", &a, &b, &n);
for (ll i = 1; i <= a; i++)
for (ll j = 1; j <= b; j++)
scanf("%lld", &v[i][j]);
for (ll i = 1; i <= a; i++)
for (ll j = 1; j <= b; j++) {
if (qx[i].size() && j > qx[i].front() + n - 1)
qx[i].pop_front();
while (qx[i].size() && v[i][j] >= v[i][qx[i].back()])
qx[i].pop_back();
qx[i].push_back(j);
if (j >= 2)
maxn[i][j - 1] = v[i][qx[i].front()];
}
for (ll i = 1; i <= a; i++)
qx[i].clear();
for (ll i = 1; i < b; i++)
for (ll j = 1; j <= a; j++) {
if (qx[i].size() && j > qx[i].front() + n - 1)
qx[i].pop_front();
while (qx[i].size() && maxn[j][i] >= maxn[qx[i].back()][i])
qx[i].pop_back();
qx[i].push_back(j);
if (j >= 2)
maxn[j - 1][i] = maxn[qx[i].front()][i];
}
for (ll i = 1; i < b; i++)
qx[i].clear();
for (ll i = 1; i <= a; i++)
for (ll j = 1; j <= b; j++) {
if (qx[i].size() && j > qx[i].front() + n - 1)
qx[i].pop_front();
while (qx[i].size() && v[i][j] <= v[i][qx[i].back()])
qx[i].pop_back();
qx[i].push_back(j);
if (j >= 2)
minn[i][j - 1] = v[i][qx[i].front()];
}
for (ll i = 1; i <= a; i++)
qx[i].clear();
for (ll i = 1; i < b; i++)
for (ll j = 1; j <= a; j++) {
if (qx[i].size() && j > qx[i].front() + n - 1)
qx[i].pop_front();
while (qx[i].size() && minn[j][i] <= minn[qx[i].back()][i])
qx[i].pop_back();
qx[i].push_back(j);
if (j >= 2)
minn[j - 1][i] = minn[qx[i].front()][i];
}
for (ll i = 1; i < a; i++)
for (ll j = 1; j < b; j++)
ans = min(ans, maxn[i][j] - minn[i][j]);
printf("%lld\n", ans);
return 0;
}