#include <stdio.h>
#include <string.h>
#define Nmax 1003
#define INF 8000010
int T[Nmax][Nmax], A[Nmax][Nmax], B[Nmax][Nmax];
int d[Nmax], D[Nmax];
int i, j, p, u, P, U, n, m, t, DX, DY, sol, Nsol, aux, L, C, k,MI,MA;
void solve() {
//deque orizontala
for (L = 1; L <= n; L++) {
k = DY;
p = 1, u = 0; P = 1, U = 0;
for (i = 1; i <= m; i++) {
while (p <= u && T[L][i] <= T[L][d[u]]) u--;
while (P <= U && T[L][i] >= T[L][D[U]]) U--;
d[++u] = i, D[++U] = i;
if (d[p] == i - k) p++;
if (D[P] == i - k) P++;
if (i >= k) {
A[L][i] = T[L][d[p]];
B[L][i] = T[L][D[P]];
}
}
}
//deque verticala
for (C = DY; C <= m; C++) {
k = DX;
p = 1, u = 0; P = 1, U = 0;
for (i = 1; i <= n; i++) {
while (p <= u && A[i][C] <= A[d[u]][C]) u--;
while (P <= U && B[i][C] >= B[D[U]][C]) U--;
d[++u] = i, D[++U] = i;
if (d[p] == i - k) p++;
if (D[P] == i - k) P++;
if (i >= k) {
MI = A[d[p]][C];
MA = B[D[P]][C];
if (MA - MI < sol) {
sol = MA - MI;
Nsol = 1;
}
else
if (MA - MI == sol)
Nsol++;
}
}
}
}
int main() {
FILE *f = fopen("struti.in", "r");
FILE *g = fopen("struti.out", "w");
fscanf(f, "%d %d %d", &n, &m, &t);
for (i = 1; i <= n; i++)
for (j = 1; j <= m; j++)
fscanf(f, "%d", &T[i][j]);
for (; t > 0; t--) {
fscanf(f, "%d %d", &DX, &DY);
sol = INF, Nsol = 0;
solve();
if (DX != DY) {
aux = DX, DX = DY, DY = aux;
solve();
}
fprintf(g, "%d %d\n", sol, Nsol);
}
fclose(f);
fclose(g);
return 0;
}