using System;
using System.Collections.Generic;
using System.Linq;
class Program {
static void Main(string[] args) {
new Program().solve();
}
Action<Object> PUTS = str => Console.WriteLine(str);
Action<int[,]> LIST = (array2D) => {
for (int i = 0; i < array2D.GetLength(0); i++) {
for (int j = 0; j < array2D.GetLength(1); j++) Console.Write("{0,-3} ", array2D[i, j]);
Console.WriteLine();
}
};
Action<int, Action<int>> REP = (n, action) => { for (int i = 0; i < n; i++) action(i); };
Action<int, int, Action<int>> FOR = (a, b, action) => { for (int i = a; i < b; i++) action(i); };
Action<int, int, Action<int, int>> NEST = (row, col, action) => {
for (int i = 0; i < row; i++) for (int j = 0; j < col; j++) action(i, j);
};
public void solve() {
Scanner cin = new Scanner();
int r = cin.nextInt();
int c = cin.nextInt();
int d = cin.nextInt();
int[,] a = new int[r, c];
for (int i = 0; i < r; i++) for (int j = 0; j < c; j++) a[i, j] = cin.nextInt();
int ans = 0;
if (d == 0) {
ans = a[0, 0];
} else {
bool dIsOdd = d % 2 == 0 ? false : true;
if (dIsOdd) {
for (int i = 0; i < r; i++) for (int j = 0; j < c - i; j++)
if (i % 2 != j % 2 && ans < a[i, j]) ans = a[i, j];
} else {
for (int i = 0; i < r; i++) for (int j = 0; j < c - i; j++)
if (i % 2 == j % 2 && ans < a[i, j]) ans = a[i, j];
}
}
PUTS(ans);
}
}
class Scanner {
string[] s;
int i;
char[] cs = new char[] { ' ' };
public Scanner() {
s = new string[0];
i = 0;
}
public string next() {
if (i < s.Length) return s[i++];
s = Console.ReadLine().Split(cs, StringSplitOptions.RemoveEmptyEntries);
i = 0;
return s[i++];
}
public int nextInt() {
return int.Parse(next());
}
public long nextLong() {
return long.Parse(next());
}
}