#!/usr/bin/env python2
# AC in principle, but TLE because python happens to be unreasonably slow.
R, C, K = [int(x) for x in input().split()]

grid = []
for r in range(R): grid.append([int(x) for x in input().split()])

l, h = 0, 1000000000
while l < h:
    m = (l+h+1)//2

    done = [[False for _ in range(C)] for _ in range(R)]
    cdist = 0
    cur, n = [], []
    for i in range(C):
        done[R-1][i] = True
        if grid[R-1][i] >= m: cur.append((R-1, i))
        else: n.append((R-1, i))

    pos = False
    while len(cur) + len(n) > 0:
        if len(cur) == 0:
            cur = n
            n = []
            cdist += 1
            if cdist > K: break
        r, c = cur.pop()
        if r == 0:
            pos = True
            break
        for x,y in [(1,0),(0,1),(-1,0),(0,-1)]:
            r2, c2 = r+x, c+y
            if r2 < 0 or c2 < 0 or r2 >= R or c2 >= C: continue
            if not done[r2][c2]:
                done[r2][c2] = True
                if grid[r2][c2] >= m: cur.append((r2, c2))
                else: n.append((r2, c2))

    if pos: l = m
    else: h = m-1

print(l)
