#include <cstdio>
#include <string>
#define MAXN 1010
#define INF 10000
void solve(int N, int M, int R[MAXN][MAXN], int DX, int DY, int *c, int *sol){
int lmax, rmax, lmin, rmin, dmax[MAXN], dmin[MAXN], i, j, aux;
static int maxh[MAXN][MAXN], minh[MAXN][MAXN];
memset(maxh, 0, sizeof(maxh));
for(i=1; i<=N; i++){
lmax=1; rmax=0;
lmin=1; rmin=0;
for(j=1; j<=M; j++){
if(lmax<=rmax && j-DX==dmax[lmax])
++lmax;
if(lmin<=rmin && j-DX==dmin[lmin])
++lmin;
while(lmax<=rmax && R[i][j]>=R[i][dmax[rmax]])
--rmax;
while(lmin<=rmin && R[i][j]<=R[i][dmin[rmin]])
--rmin;
dmax[++rmax]=j;
dmin[++rmin]=j;
/*for(int k=lmax; k<=rmax; k++)
printf("%d ", R[i][dmax[k]]);
printf("\n");
for(int k=lmin; k<=rmin; k++)
printf("%d ", R[i][dmin[k]]);
printf("\n\n");*/
if(j>=DX){
maxh[i][j]=R[i][dmax[lmax]];
minh[i][j]=R[i][dmin[lmin]];
}
}
}
/*for(i=1; i<=N; i++){
for(j=1; j<=M; j++)
printf("%d ", maxh[i][j]);
printf("\n");
}
printf("\n");
for(i=1; i<=N; i++){
for(j=1; j<=M; j++)
printf("%d ", minh[i][j]);
printf("\n");
}
printf("\n");*/
for(i=DX; i<=M; i++){
lmax=1; rmax=0;
lmin=1; rmin=0;
for(j=1; j<=N; j++){
if(lmax<=rmax && j-DY==dmax[lmax])
++lmax;
if(lmin<=rmin && j-DY==dmin[lmin])
++lmin;
while(lmax<=rmax && maxh[j][i]>=maxh[dmax[rmax]][i])
--rmax;
while(lmin<=rmin && minh[j][i]<=minh[dmin[rmin]][i])
--rmin;
dmax[++rmax]=j;
dmin[++rmin]=j;
if(j>=DY){
aux=maxh[dmax[lmax]][i]-minh[dmin[lmin]][i];
if(aux<*sol){
*sol=aux; *c=1;
}
else if(aux==*sol)
(*c)++;
}
}
}
}
int main(){
freopen("struti.in", "r", stdin);
freopen("struti.out", "w", stdout);
int N, M, DX, DY, P, i, j, c, sol;
static int R[MAXN][MAXN];
scanf("%d%d%d", &N, &M, &P);
for(i=1; i<=N; i++)
for(j=1; j<=M; j++)
scanf("%d", &R[i][j]);
for(i=0; i<P; i++){
scanf("%d%d", &DX, &DY);
c=0; sol=INF;
solve(N, M, R, DX, DY, &c, &sol);
if(DX!=DY){
solve(N, M, R, DY, DX, &c, &sol);
}
printf("%d %d\n", sol, c);
}
return 0;
}