from collections import deque N, M, K = map(int, input().split()) A = [list(map(int, input().split())) for i in range(N)] steps = [(0, 1), (0, -1), (-1, 0), (1, 0)] ok = 1 ng = 10 ** 9 + 1 def judge(m): G = [[10 ** 18] * M for i in range(N)] queue = deque([(0, 0)]) G[0][0] = 1 if A[0][0] < m else 0 while len(queue) != 0: r, c = queue.popleft() for x, y in steps: nr = r + x nc = c + y if 0 <= nr < N and 0 <= nc < M: if G[nr][nc] != 10 ** 18: continue if A[nr][nc] < m: G[nr][nc] = G[r][c] + 1 queue.append((nr, nc)) else: G[nr][nc] = G[r][c] queue.appendleft((nr, nc)) return G[-1][-1] <= K while ok + 1 < ng: mid = (ok + ng) // 2 if judge(mid): ok = mid else: ng = mid print(ok)