#include <stdio.h>
#define Nmax 1003
#define INF 8000010
int T[Nmax][Nmax], A[Nmax][Nmax], B[Nmax][Nmax], MIN[Nmax][Nmax], MAX[Nmax][Nmax];
int d[Nmax], D[Nmax];
int i, j, p, u, P, U, n, m, t, DX, DY, sol, Nsol, aux;
void dequeOriz(int L, int k) {
int i;
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]];
}
}
}
void dequeVert(int C, int k) {
int i;
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) {
MIN[i][C] = A[d[p]][C];
MAX[i][C] = B[D[P]][C];
}
}
}
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;
for (i = 1; i <= n; i++)
dequeOriz(i, DY);
for (j = 1; j <= m; j++)
dequeVert(j, DX);
for (i = DX; i <= n; i++)
for (j = DY; j <= m; j++)
if (MAX[i][j] - MIN[i][j] < sol) {
sol = MAX[i][j] - MIN[i][j];
Nsol = 1;
}
else
if (MAX[i][j] - MIN[i][j] == sol)
Nsol++;
aux = DX, DX = DY, DY = aux;
for (i = 1; i <= n; i++)
dequeOriz(i, DY);
for (j = 1; j <= m; j++)
dequeVert(j, DX);
for (i = DX; i <= n; i++)
for (j = DY; j <= m; j++)
if (MAX[i][j] - MIN[i][j] < sol)
sol = MAX[i][j] - MIN[i][j];
else
if (MAX[i][j] - MIN[i][j] == sol)
Nsol++;
if (DX == DY)
Nsol /= 2;
fprintf(g, "%d %d\n", sol, Nsol);
}
fclose(f);
fclose(g);
return 0;
}