#include <stdio.h>
#include <string>
int n,m,t;
int a[1010][1010],ca[1010][1010],b[1010][1010];
int dq[1010][1010][2],d[1010];
int min,nr;
void deque(int n, int m, int x, int k)
{
int i,j,st,fi;
for (i=1; i<=n; ++i)
{
st=1;
fi=0;
for (j=1; j<=m; ++j)
{
if (j-d[st]>=x) ++st;
while (fi>=st && a[i][j]<a[i][d[fi]]) --fi;
d[++fi]=j;
dq[i][j][k]=a[i][d[st]];
}
}
}
void print(int a[][1010], int n, int m )
{
int i,j;
for (i=1; i<=n; ++i)
{
for (j=1; j<=m; ++j) printf("%d ",a[i][j]);
printf("\n");
}
printf("\n");
}
void solve(int tip, int dx, int dy)
{
int i,j,k,l;
deque(n,m,dy,tip);
for (i=1; i<=n; ++i)
for (j=1; j<=m; ++j) a[i][j]=dq[i][j][tip];
for (i=1; i<=m; ++i)
for (j=1; j<=n; ++j) b[i][j]=a[j][m-i+1];
for (i=1; i<=m; ++i)
for (j=1; j<=n; ++j) a[i][j]=b[i][j];
deque(m,n,dx,tip);
}
void rez(int dx,int dy)
{
int i,j;
memcpy(ca,a,sizeof(a));
solve(0,dx,dy);
for (i=1; i<=n; ++i)
for (j=1; j<=m; ++j) a[i][j]=-ca[i][j];
solve(1,dx,dy);
for (i=1; i<=m-dy+1; ++i)
for (j=dx; j<=n; ++j)
{
if (-dq[i][j][1]-dq[i][j][0]<min)
{
min=-dq[i][j][1]-dq[i][j][0];
nr=0;
}
if (-dq[i][j][1]-dq[i][j][0]==min) ++nr;
}
memcpy(a,ca,sizeof(ca));
}
int main()
{
freopen("struti.in","r",stdin);
freopen("struti.out","w",stdout);
int i,j,k,l;
scanf("%d %d %d",&n,&m,&t);
for (i=1; i<=n; ++i)
for (j=1; j<=m; ++j)
scanf("%d",&a[i][j]);
while (t)
{
--t;
min=2000000000;
int dx,dy;
scanf("%d %d",&dx,&dy);
rez(dx,dy);
if (dx!=dy) rez(dy,dx);
printf("%d %d\n",min,nr);
}
return 0;
}