from collections import deque n, m, K = map(int, input().split()) A = [list(map(int, input().split())) for _ in range(n)] l = 0 r = 10**9 + 1 di = [0, 1, 0, -1] dj = [1, 0, -1, 0] def ok(x): dist = [[1 << 30] * m for _ in range(n)] dist[0][0] = 0 if A[0][0] < x: dist[0][0] = 1 used = [[False] * m for _ in range(n)] queue = deque() queue.append(0) while queue: tmp = queue.popleft() i = tmp // m j = tmp - i * m if used[i][j]: continue used[i][j] = True d = dist[i][j] for k in range(4): ni = i + di[k] nj = j + dj[k] if ni < 0 or ni >= n or nj < 0 or nj >= m: continue if A[ni][nj] >= x: if dist[ni][nj] > d: dist[ni][nj] = d queue.appendleft(ni * m + nj) else: if dist[ni][nj] > d + 1: dist[ni][nj] = d + 1 queue.append(ni * m + nj) return dist[n - 1][m - 1] <= K while r - l > 1: mid = (l + r) // 2 if ok(mid): l = mid else: r = mid print(l)