#include <bits/stdc++.h>
#define MMAX 1000
#define NMAX 1000
using namespace std;
int m, n, p, a[MMAX][NMAX];
deque<pair<int, int>> minCols[NMAX], maxCols[NMAX];
void insert(deque<pair<int, int>> &deq, int i, int x,
const int &(*fn)(const int &, const int &)) {
while (!deq.empty() && fn(x, deq.back().second) == x) {
deq.pop_back();
}
deq.emplace_back(i, x);
}
void erase(deque<pair<int, int>> &deq, int i) {
while (!deq.empty() && deq.front().first <= i) {
deq.pop_front();
}
}
void solve(int dx, int dy, int &mini, int &nr) {
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
erase(minCols[j], i - dx);
erase(maxCols[j], i - dx);
insert(minCols[j], i, a[i][j], min<int>);
insert(maxCols[j], i, a[i][j], max<int>);
}
if (i >= dx - 1) {
deque<pair<int, int>> minLine, maxLine;
for (int j = 0; j < n; j++) {
erase(minLine, j - dy);
erase(maxLine, j - dy);
insert(minLine, j, minCols[j].front().second, min<int>);
insert(maxLine, j, maxCols[j].front().second, max<int>);
if (j >= dy - 1) {
int crt = maxLine.front().second - minLine.front().second;
if (crt < mini) {
mini = crt;
nr = 1;
} else if (crt == mini) {
nr++;
}
}
}
}
}
for (int j = 0; j < n; j++) {
minCols[j].clear();
maxCols[j].clear();
}
}
int main() {
ifstream cin("struti.in");
ofstream cout("struti.out");
cin >> m >> n >> p;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cin >> a[i][j];
}
}
for (int i = 0; i < p; i++) {
int dx, dy;
cin >> dx >> dy;
int mini = 8001, nr = 0;
solve(dx, dy, mini, nr);
if (dx != dy)
solve(dy, dx, mini, nr);
cout << mini << " " << nr << "\n";
}
return 0;
}