import sys; input = sys.stdin.readline class UFDS: def __init__(s, N): s.p = [*range(N)]; s.r = [0]*N def find(s, i): if s.p[i] == i: return i s.p[i] = s.find(s.p[i]) return s.p[i] def union(s, i, j): if (x:=s.find(i)) != (y:=s.find(j)): if s.r[x] > s.r[y]: s.p[y] = x else: s.p[x] = y; s.r[y] += s.r[x] == s.r[y] return 1 R, C, Q = map(int, input().split()); N = R*C M = [[*map(int, input().split())] for _ in range(R)] E = [] for i in range(R*C): if i//C+1 tin[b] or tout[b] > tout[j]: a = j return jmp[a][0] for _ in range(Q): r1, c1, r2, c2 = map(int, input().split()) a = r1*C+c1-C-1; b = r2*C+c2-C-1 if a == b: print(M[r1-1][c1-1]); continue d = lca(a, b); z = 0 for u in (a, b): for l in range(L-1, -1, -1): j = jmp[u][l] if tin[j] > tin[d]: z = max(z, D[u][l]); u = j if u != d: z = max(z, D[u][0]) print(z)