#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 1000;
int matr[MAX_N][MAX_N];
int minmatr[MAX_N][MAX_N], maxmatr[MAX_N][MAX_N], aux1[MAX_N][MAX_N], aux2[MAX_N][MAX_N];
struct SlidingWindow {
int st, dr, sign;
int* data[MAX_N];
SlidingWindow(bool minDeque) {
st = dr = 0;
if(minDeque)
sign = 1;
else
sign = -1;
}
void insert(int *val) {
while(dr > st && *val * sign <= *data[dr - 1] * sign)
--dr;
data[dr++] = val;
}
void erase(int *val) {
if(data[st] == val)
++st;
}
int query() {
return *data[st];
}
};
void slidingWindow1d(int n, int m, int k, bool minDeq, int matr[MAX_N][MAX_N], int rez[MAX_N][MAX_N]) {
for(int l = 0; l < n; ++l) {
SlidingWindow deq(minDeq);
for(int c = 0; c < k - 1; ++c)
deq.insert(&matr[l][c]);
for(int c = k - 1; c < m; ++c) {
deq.insert(&matr[l][c]);
rez[l][c - k + 1] = deq.query();
deq.erase(&matr[l][c - k + 1]);
}
}
}
void slidingWindow2d(int n, int m, int dx, int dy, int matr[MAX_N][MAX_N], int &rez, int &cnt) {
slidingWindow1d(n, m, dx, true, matr, aux1);
slidingWindow1d(n, m, dx, false, matr, aux2);
m = m - dx + 1;
for(int l = 0; l < n; ++l)
for(int c = 0; c < m; ++c) {
minmatr[c][l] = aux1[l][c];
maxmatr[c][l] = aux2[l][c];
}
swap(n, m);
slidingWindow1d(n, m, dy, true, minmatr, aux1);
slidingWindow1d(n, m, dy, false, maxmatr, aux2);
m = m - dy + 1;
for(int l = 0; l < n; ++l)
for(int c = 0; c < m; ++c)
if(aux2[l][c] - aux1[l][c] < rez) {
rez = aux2[l][c] - aux1[l][c];
cnt = 1;
} else if(aux2[l][c] - aux1[l][c] == rez)
++cnt;
}
void solveQuery(int n, int m, int dx, int dy, int matr[MAX_N][MAX_N], int &rez, int &cnt) {
slidingWindow2d(n, m, dx, dy, matr, rez, cnt);
if(dx != dy)
slidingWindow2d(n, m, dy, dx, matr, rez, cnt);
}
int main() {
int n, m, p, dx, dy;
FILE *fin = fopen("struti.in", "r");
fscanf(fin, "%d%d%d", &n, &m, &p);
for(int l = 0; l < n; ++l)
for(int c = 0; c < m; ++c)
fscanf(fin, "%d", &matr[l][c]);
FILE *fout = fopen("struti.out", "w");
for(int i = 0; i < p; ++i) {
int rez, cnt;
fscanf(fin, "%d%d", &dx, &dy);
rez = 8001;
cnt = 0;
solveQuery(n, m, dx, dy, matr, rez, cnt);
fprintf(fout, "%d %d\n", rez, cnt);
}
fclose(fin);
fclose(fout);
return 0;
}