DijkstraHeap<int>h;
int@n,@m,@k,@a[n][m];
h.malloc(9d4);
int ok=1,ng=1d9+1;
while(ok+1<ng){
	int t=ok+ng>>1;
	h.init(9d4);
	h.change(0,a[0][0]<t);
	while(h.size){
		int i=h.pop();
		int v=h.val[i];
		int y=i/300;
		int x=i%300;
		if(y)     h.change(i-300,v+(a[y-1][x]<t));
		if(y<n-1) h.change(i+300,v+(a[y+1][x]<t));
		if(x)     h.change(i-  1,v+(a[y][x-1]<t));
		if(x<m-1) h.change(i+  1,v+(a[y][x+1]<t));
	}
	if(h.val[(n-1)*300+(m-1)]<=k){
		ok=t;
	}else{
		ng=t;
	}
}
wt(ok);