#include <bits/stdc++.h>
#define ll long long
#define _for(i, a, b) for (int i = (a); i <= (b); i ++ )
#define _all(i, a, b) for (int i = (a); i >= (b); i -- )
using namespace std;
const int N = 1005;
int a, b, n, ans, v[N][N], p_max[N][N][15], p_min[N][N][15];
inline int query_max(int x, int y) {
int k = int(log2((y - x + 1) * 1.0)), ret = -2e9;
_for (i, x, x + n - 1) ret = max(ret, max(p_max[i][y][k], p_max[i][y + n - 1 - (1 << k) + 1][k]));
return ret;
}
inline int query_min(int x, int y) {
int k = int(log2((y - x + 1) * 1.0)), ret = 2e9;
_for (i, x, x + n - 1) ret = min(ret, min(p_min[i][y][k], p_min[i][y + n - 1 - (1 << k) + 1][k]));
return ret;
}
int main() {
ios :: sync_with_stdio(false), cin.tie(0), cout.tie(0);
cin >> a >> b >> n;
_for (i, 1, a) _for (j, 1, b) cin >> v[i][j], p_max[i][j][0] = p_min[i][j][0] = v[i][j];
_for (P, 1, a) for (int j = 1; (1 << j) <= b; j ++ ) _for (i, 1, b - (1 << (j - 1)))
p_max[P][i][j] = max(p_max[P][i][j - 1], p_max[P][i + (1 << (j - 1))][j - 1]),
p_min[P][i][j] = min(p_min[P][i][j - 1], p_min[P][i + (1 << (j - 1))][j - 1]);
_for (i, 1, a - n + 1) _for (j, 1, b - n + 1) ans = min(ans, query_max(i, j) - query_min(i, j));
cout << ans << endl;
return 0;
}