#include <bits/stdc++.h>
#define DEBUG(x) cerr << (#x) << ": " << (x) << '\n'
using namespace std;
inline bool comp(int a, int b, int comp) {
if (!comp) return a <= b;
return a >= b;
}
inline void getMinMax(int n, int delta, int type, vector<int> &v, vector<int> &ret) {
deque<int> dq;
for (int i = 1; i <= n; ++i) {
while (!dq.empty() && dq.front() <= i - delta) dq.pop_front();
while (!dq.empty() && comp(v[i], v[dq.back()], type)) dq.pop_back();
dq.push_back(i);
ret[i] = v[dq.front()];
}
}
inline pair<int, int> solve(int n, int m, int dx, int dy, vector<vector<int>> &a) {
vector<vector<int>> min(m + 2, vector<int>(n + 2));
vector<vector<int>> max(m + 2, vector<int>(n + 2));
vector<int> min_last(m + 2), max_last(m + 2);
for (int row = 1; row <= n; ++row) {
getMinMax(m, dx, 0, a[row], min_last);
getMinMax(m, dx, 1, a[row], max_last);
for (int col = 1; col <= m; ++col) {
min[col][row] = min_last[col];
max[col][row] = max_last[col];
}
}
pair<int, int> ans = {(int)1e9, 0};
min_last.resize(n + 2);
max_last.resize(n + 2);
for (int col = dx; col <= m; ++col) {
getMinMax(n, dy, 0, min[col], min_last);
getMinMax(n, dy, 1, max[col], max_last);
for (int row = dy; row <= n; ++row) {
if (ans.first > max_last[row] - min_last[row]) ans = {max_last[row] - min_last[row], 1};
else if (ans.first == max_last[row] - min_last[row]) ++ans.second;
}
}
return ans;
}
pair<int, int> join(pair<int, int> a, pair<int, int> b) {
if (a.first != b.first) return min(a, b);
return {a.first, a.second + b.second};
}
int main() {
freopen("struti.in", "r", stdin);
freopen("struti.out", "w", stdout);
ios::sync_with_stdio(0);
cin.tie(0);
int n, m, p;
cin >> n >> m >> p;
//~ scanf("%d%d%d", &n, &m, &p);
vector<vector<int>> a(n + 2, vector<int>(m + 2));
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
//~ scanf("%d", &a[i][j]);
cin >> a[i][j];
}
}
while (p--) {
int dx, dy;
cin >> dx >> dy;
//~ scanf("%d%d", &dx, &dy);
pair<int, int> ans = solve(n, m, dx, dy, a);
if (dx != dy) {
ans = join(ans, solve(n, m, dy, dx, a));
}
cout << ans.first << ' ' << ans.second << '\n';
}
cout.flush();
#ifdef LOCAL_DEFINE
cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
#endif
return 0;
}