MLE
#include <bits/stdc++.h>
#define ll long long
#define IOS ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);
using namespace std;
int x, y, n;
ll a[1010][1010];
ll lb[1010];
ll dp1[1010][1010][8];
ll dp2[1010][1010][8];
void ini() {
lb[0] = -1;
for(int i = 1; i <= n; i++) {
lb[i] = (i & (i - 1)) ? lb[i - 1] : lb[i - 1] + 1;
}
}
void ST() {
for(int i = 1; i <= x; i++) {
for(int j = 1; j <= y; j++) {
dp1[i][j][0] = dp2[i][j][0] = a[i][j];
}
}
for(int k = 1; k <= x; k++) {
for(int j = 1; j <= lb[n]; j++) {
for(int i = 1; i <= y - (1 << j) + 1; i++) {
dp1[k][i][j] = max(dp1[k][i][j - 1], dp1[k][i + (1 << (j - 1))][j - 1]);
dp2[k][i][j] = min(dp2[k][i][j - 1], dp2[k][i + (1 << (j - 1))][j - 1]);
}
}
}
}
ll RMQ(int x, int y, int B) {
int len = lb[B];
ll maxs = -1;
ll mins = LLONG_MAX;
int l = y, r = y + B - 1;
for(int i = x; i < x + B; i++) {
maxs = max(maxs, max(dp1[i][l][len], dp1[i][r - (1 << len) + 1][len]));
mins = min(mins, min(dp2[i][l][len], dp2[i][r - (1 << len) + 1][len]));
}
return maxs - mins;
}
int main() {
IOS
cin >> x >> y >> n;
for(int i = 1; i <= x; i++) {
for(int j = 1; j <= y; j++) {
cin >> a[i][j];
}
}
ini();
ST();
ll ans = LLONG_MAX;
for(int i = 1; i <= x - n + 1; i++) {
for(int j = 1; j <= y - n + 1; j++) {
ll tmp = RMQ(i, j, n);
ans = min(ans, tmp);
}
}
cout << ans;
return 0;
}