defsolve(): n, m, k = map(int, input().split()) grid = [list(map(int, input().split())) for _ inrange(n)] assertlen(grid) == n andlen(grid[0]) == m
mx1 = [[0] * (m - k + 1) for _ inrange(n)] mn1 = [[0] * (m - k + 1) for _ inrange(n)]
for i, row inenumerate(grid): q1 = deque() q2 = deque() for j, x inenumerate(row): while q1 and row[q1[-1]] <= x: q1.pop() while q2 and row[q2[-1]] >= x: q2.pop() q1.append(j) q2.append(j) while q1 and q1[0] <= j - k: q1.popleft() while q2 and q2[0] <= j - k: q2.popleft() if j >= k - 1: mx1[i][j - k + 1] = row[q1[0]] mn1[i][j - k + 1] = row[q2[0]]
mx2 = [[0] * (m - k + 1) for _ inrange(n - k + 1)] for j, col inenumerate(zip(*mx1)): q = deque() for i, x inenumerate(col): while q and col[q[-1]] <= x: q.pop() q.append(i) while q and q[0] <= i - k: q.popleft() if i >= k - 1: mx2[i - k + 1][j] = col[q[0]]
mn2 = [[0] * (m - k + 1) for _ inrange(n - k + 1)] for j, col inenumerate(zip(*mn1)): q = deque() for i, x inenumerate(col): while q and col[q[-1]] >= x: q.pop() q.append(i) while q and q[0] <= i - k: q.popleft() if i >= k - 1: mn2[i - k + 1][j] = col[q[0]]
ans = float("inf") for i inrange(n - k + 1): for j inrange(m - k + 1): ans = min(ans, mx2[i][j] - mn2[i][j]) print(ans)