#include using namespace std; using ll = long long; #define rep(i, s, e) for (int i = (int)(s); i < (int)(e); ++i) vector di = {0, 1, 0, -1}; vector dj = {1, 0, -1, 0}; int main() { cin.tie(nullptr); ios_base::sync_with_stdio(false); int H, W, K; cin >> H >> W >> K; vector A(H, vector(W)); rep(i, 0, H) rep(j, 0, W) cin >> A[i][j]; ll ok = 1, ng = 1e9 + 1; while (ng - ok > 1) { ll mid = (ok + ng) / 2; deque> deq; vector dist(H, vector(W, 1 << 30)); deq.push_back({0, 0}); dist[0][0] = (A[0][0] < mid ? 1 : 0); while (!deq.empty()) { int vi = deq.front().first; int vj = deq.front().second; deq.pop_front(); rep(dir, 0, 4) { int ni = vi + di[dir]; int nj = vj + dj[dir]; if (ni < 0 || H <= ni || nj < 0 || W <= nj) continue; int cost = (A[ni][nj] < mid ? 1 : 0); int d = dist[vi][vj] + cost; if (dist[ni][nj] > d) { dist[ni][nj] = d; if (cost == 0) { deq.push_front({ni, nj}); } else { deq.push_back({ni, nj}); } } } } if (dist[H - 1][W - 1] <= K) ok = mid; else ng = mid; } cout << ok << '\n'; }