#include <stdio.h>
#include <string.h>
#define INF 1<<30
FILE*f=fopen("struti.in", "r");
FILE*g=fopen("struti.out", "w");
int aux, min, nr, D[1011], P, u, i, dx, dy, t, p, n, m, c[1011][1011], a[1011][1011], A[1011][1011], B[1011][1011], C[1011][1011], j;
void dmin(){
for(i=1; i<=m; i++)
{
p=1;
u=0;
memset(D, 0, sizeof(D));
for(j=1; j<=n; j++)
{
while(D[p]<=j-dx && p<=u)
p++;
while(p<=u && a[D[u]][i]>=a[j][i])
u--;
u++;
D[u]=j;
if(j>=dx)
A[j][i]=a[D[p]][i];
}
}
}
void dmax(){
for(i=1; i<=m; i++)
{
p=1;
u=0;
memset(D, 0, sizeof(D));
for(j=1; j<=n; j++)
{
while(D[p]<=j-dx && p<=u)
p++;
while(p<=u && a[D[u]][i]<=a[j][i])
u--;
u++;
D[u]=j;
if(j>=dx)
A[j][i]=a[D[p]][i];
}
}
}
void d2min(){
for(i=dx; i<=n; i++)
{
p=1;
u=0;
memset(D, 0, sizeof(D));
for(j=1; j<=m; j++)
{
while(D[p]<=j-dy && p<=u)
p++;
while(p<=u && A[i][D[u]]>=A[i][j])
u--;
u++;
D[u]=j;
if(j>=dy)
B[i][j]=A[i][D[p]];
}
}
}
void d2max(){
for(i=dx; i<=n; i++)
{
p=1;
u=0;
memset(D, 0, sizeof(D));
for(j=1; j<=m; j++)
{
while(D[p]<=j-dy && p<=u)
p++;
while(p<=u && A[i][D[u]]<=A[i][j])
u--;
u++;
D[u]=j;
if(j>=dy)
C[i][j]= A[i][D[p]];
}
}
}
int main(){
fscanf(f, "%d %d %d", &n, &m, &P);
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
fscanf(f, "%d", &a[i][j]);
for(t=1; t<=P; t++)
{
fscanf(f, "%d %d", &dx, &dy);
dmin();
d2min();
for(i=dx; i<=n; i++)
memset(A[i], 0, sizeof(A[i]));
dmax();
d2max();
min=INF;
nr=0;
for(i=dx; i<=n; i++)
for(j=dy; j<=m; j++)
{
c[i][j]=C[i][j]-B[i][j];
if(c[i][j]==min)
nr++;
if(c[i][j]<min)
{
min=c[i][j];
nr=1;
}
B[i][j]=A[i][j]=C[i][j]=0;
}
if(dx!=dy)
{
aux=dx;
dx=dy;
dy=aux;
dmin();
d2min();
for(i=dx; i<=n; i++)
memset(A[i], 0, sizeof(A[i]));
dmax();
d2max();
for(i=dx; i<=n; i++)
for(j=dy; j<=m; j++)
{
c[i][j]=C[i][j]-B[i][j];
if(c[i][j]==min)
nr++;
if(c[i][j]<min)
{
min=c[i][j];
nr=1;
}
B[i][j]=A[i][j]=C[i][j]=0;
}
}
fprintf(g, "%d %d\n", min, nr);
}
fclose(f);
fclose(g);
return 0;
}