#include <stdio.h>
#include <algorithm>
#define mx 1024
using namespace std;
struct coord
{
int x, y;
} dqmm[mx], dqmn[mx], cdqmm[mx][mx], cdqmn[mx][mx];
int cctmm[mx], cctmn[mx], cstmm[mx], cstmn[mx];
int n, m, p, soll, solc, x, y, stmm, stmn, ctmm, ctmn, lx, ly;
int alt[mx][mx];
inline bool cmm(int x, int y)
{
return x > y;
}
inline bool cmn(int x, int y)
{
return x < y;
}
inline void dqw(coord *dq, int& st, int& ct, bool (* cmp) (int x, int y))
{
for (; ct > st && cmp(alt[dq[ct].x][dq[ct].y], alt[dq[ct - 1].x][dq[ct - 1].y]); ct--)
swap(dq[ct], dq[ct - 1]);
if (dq[st].x < dq[ct].x + 1 - lx || dq[st].y < dq[ct].y + 1 - ly)
st++;
}
inline void cauta()
{
memset(dqmm, 0, sizeof(dqmm));
memset(dqmn, 0, sizeof(dqmn));
memset(cdqmm, 0, sizeof(cdqmm));
memset(cdqmn, 0, sizeof(cdqmn));
memset(cctmm, 0, sizeof(cctmm));
memset(cctmn, 0, sizeof(cctmn));
for (int i = 1 ; i <= m; i++)
cstmm[i] = cstmn[i] = 1;
for (int i = 1; i <= n; i++)
{
memset(dqmm, 0, sizeof(dqmm));
memset(dqmn, 0, sizeof(dqmn));
ctmm = ctmn = 0;
stmm = stmn = 1;
for (int j = 1; j <= m; j++)
{
cdqmm[j][++cctmm[j]].x = cdqmn[j][++cctmn[j]].x = i;
cdqmm[j][cctmm[j]].y = cdqmn[j][cctmn[j]].y = j;
dqw(cdqmm[j], cstmm[j], cctmm[j], cmm);
dqw(cdqmn[j], cstmn[j], cctmn[j], cmn);
dqmm[++ctmm] = cdqmm[j][cstmm[j]];
dqmn[++ctmn] = cdqmn[j][cstmn[j]];
dqw(dqmm, stmm, ctmm, cmm);
dqw(dqmn, stmn, ctmn, cmn);
int l = alt[dqmm[stmm].x][dqmm[stmm].y] - alt[dqmn[stmn].x][dqmn[stmn].y];
if (i < lx || j < ly)
continue;
if (l < soll)
{
soll = l;
solc = 0;
}
if (l == soll)
solc++;
}
}
}
int main()
{
freopen("struti.in","r",stdin);
freopen("struti.out","w",stdout);
scanf("%d %d %d", &n, &m, &p);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
scanf("%d", &alt[i][j]);
for (; p; p--)
{
scanf("%d %d", &x, &y);
soll = LONG_MAX;
solc = 0;
lx = x, ly = y;
cauta();
if (x != y)
{
swap(lx, ly);
cauta();
}
printf("%d %d\n", soll, solc);
}
fclose(stdin);
fclose(stdout);
return 0;
}