#include <cstdio>
#include <cmath>
#include <vector>
#include <algorithm>
#include <cassert>
#include <cstring>
#include <climits>
#include <queue>
using namespace std;
typedef long long LL;
#ifdef INFOARENA
#define ProblemName "struti"
#endif
#define MCONCAT(A, B) A B
#ifdef ProblemName
#define InFile MCONCAT(ProblemName, ".in")
#define OuFile MCONCAT(ProblemName, ".out")
#else
#define InFile "fis.in"
#define OuFile "fis.out"
#endif
const int MAXN = 1010;
int a[2][MAXN][MAXN];
int pre[2][MAXN][MAXN];
int N, M;
int arbSz;
int arbInt[2][MAXN][MAXN * 4];
/*void makeArb(int id, int line) {
arbInt[id][line][arbSz-1]
for (int i=arbSz)
}*/
void rmq_init(int id) {
for (int i = 0; i <= N; ++i)
for (int j = 0; j <= N; ++j) {
if (i == 0 || j == 0) {
pre[id][i][j] = INT_MIN;
continue;
}
pre[id][i][j] = a[id][i][j];
if (pre[id][i - 1][j] > pre[id][i][j])
pre[id][i][j] = pre[id][i - 1][j];
if (pre[id][i][j - 1] > pre[id][i][j])
pre[id][i][j] = pre[id][i][j - 1];
}
//for (arbSz = 1; arbSz <= N; arbSz *= 2);
}
int maxOnLine(int id, int i, int j1, int j2) {
int best = INT_MIN;
for (int j = j1; j <= j2; ++j)
if (a[id][i][j] > best)
best = a[id][i][j];
return best;
}
int rmq2(int id, int i1, int j1, int i2, int j2) {
int best = INT_MIN;
for (int i = i2; i >= i1; --i) {
int bestHere = pre[id][i][j2];
if (bestHere <= best)
return best;
if (bestHere != pre[id][i][j1 - 1] && bestHere != pre[id][i1 - 1][j2])
return bestHere;
int maxi = maxOnLine(id, i, j1, j2);
if (maxi == bestHere)
return bestHere;
if (maxi > best)
best = maxi;
}
return best;
}
int rmq(int id, int i1, int j1, int i2, int j2) {
int best = INT_MIN;
for (int i = i1; i <= i2; ++i)
for (int j = j1; j <= j2; ++j)
if (a[id][i][j] > best)
best = a[id][i][j];
return best;
}
void calc1(int dx, int dy, int &best, int &nr) {
for (int i1 = 1, i2 = i1 + dx - 1; i2 <= N; ++i1, ++i2)
for (int j1 = 1, j2 = j1 + dy - 1; j2 <= M; ++j1, ++j2) {
//printf("Considering (%d %d) (%d %d)", i1, j1, i2, j2);
int res = rmq(0, i1, j1, i2, j2) + rmq(1, i1, j1, i2, j2);
//printf(" -- result %d\n", res);
if (res < best) {
best = res;
nr = 0;
}
if (res == best)
++nr;
}
}
int main() {
assert(freopen(InFile, "r", stdin));
assert(freopen(OuFile, "w", stdout));
int Q;
scanf("%d%d%d", &M, &N, &Q);
for (int i = 1; i <= N; ++i)
for (int j = 1; j <= N; ++j) {
scanf("%d", &a[0][i][j]);
a[1][i][j] = -a[0][i][j];
}
rmq_init(0), rmq_init(1);
while (Q--) {
int dx, dy;
scanf("%d%d", &dx, &dy);
int best = INT_MAX, nr = 0;
calc1(dx, dy, best, nr);
if (dx != dy)
calc1(dy, dx, best, nr);
printf("%d %d\n", best, nr);
}
return 0;
}