#include <fstream>
using namespace std;
ifstream f("struti.in");
ofstream g("struti.out");
const int nmax = 1005;
int stlm[nmax], drlm[nmax], dqlinm[nmax][nmax];
int stlM[nmax], drlM[nmax], dqlinM[nmax][nmax];
int stcm, drcm, dqcm[nmax];
int stcM, drcM, dqcM[nmax];
int am[nmax][nmax], aM[nmax][nmax];
int n, m, a[nmax][nmax], q, i, j, x, y, z;
inline int mai_mic(int a, int b) {
return a <= b;
}
inline int mai_mare(int a, int b) {
return a >= b;
}
int use_deque(int *a, int x, int width, int current, int *dq, int &st, int &dr,
int (*f)(int, int)) {
while (( (*f)(a[current], a[dq[dr]]) == 1) && st <= dr) dr--;
dq[++dr] = current;
if (current-dq[st]+1 > width)
st++;
return a[dq[st]];
}
int query(int pas, int x, int y, int &nsol) {
int i, j, km, lm, kM, lM;
int minim = 1e9, cnt = 0;
for (i = 1; i <= n; i++)
stlm[i] = stlM[i] = 1, drlm[i] = drlM[i] = 0;
for (j = 1; j <= m; j++) {
stcm = stcM = 1, drcm = drcM = 0;
for (i = 1; i <= n; i++) {
km = use_deque( a[i], a[i][j], y, j, dqlinm[i], stlm[i], drlm[i], mai_mic);
kM = use_deque( a[i], a[i][j], y, j, dqlinM[i], stlM[i], drlM[i], mai_mare);
am[j][i] = km;
aM[j][i] = kM;
if (j >= y) {
lm = use_deque(am[j], km, x, i, dqcm, stcm, drcm, mai_mic);
lM = use_deque(aM[j], kM, x, i, dqcM, stcM, drcM, mai_mare);
}
if (i >= x && j >= y) {
if (lM-lm < minim)
minim = lM-lm, cnt = 1;
else if (lM-lm == minim)
cnt++;
}
}
}
for (i = 1; i <= n; i++)
stlm[i] = stlM[i] = 1, drlm[i] = drlM[i] = 0;
if (x != y) {
for (j = 1; j <= m; j++) {
stcm = stcM = 1, drcm = drcM = 0;
for (i = 1; i <= n; i++) {
km = use_deque( a[i], a[i][j], x, j, dqlinm[i], stlm[i], drlm[i], mai_mic);
kM = use_deque( a[i], a[i][j], x, j, dqlinM[i], stlM[i], drlM[i], mai_mare);
am[j][i] = km;
aM[j][i] = kM;
if (j >= x) {
lm = use_deque(am[j], km, y, i, dqcm, stcm, drcm, mai_mic);
lM = use_deque(aM[j], kM, y, i, dqcM, stcM, drcM, mai_mare);
}
if (i >= y && j >= x) {
if (lM-lm < minim)
minim = lM-lm, cnt = 1;
else if (lM-lm == minim)
cnt++;
}
}
}
}
nsol = cnt;
return minim;
}
void parse() {
f.get();
char s[6005], *k;
int i, nr = 0;
for (i = 1; i <= n; i++) {
f.getline(s, sizeof(s));
k = s;
for (j = 1; j <= m; j++) {
nr = 0;
while (*k >= '0' && *k <= '9')
nr = nr*10 + *k - '0', k++;
a[i][j] = nr;
while (*k == ' ') k++;
}
}
}
int main() {
f >> n >> m >> q;
parse();
for (i = 1; i <= q; i++) {
f >> x >> y;
g << query(i,x,y,z);
g << ' ' << z << '\n';
}
return 0;
}