#include <stdio.h>
#include <string.h>
int n,m,t;
int a[1010][1010],ca[1010][1010],b[1010][1010];
int dq[2][1010][1010],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[k][i][j]=a[i][d[st]];
}
}
}
void solve(int tip, int dx, int dy)
{
int i,j,k,l;
deque(n,m,dy,tip);
memcpy(a,dq[tip],sizeof(dq[tip]));
for (i=1; i<=m; ++i)
for (j=1; j<=n; ++j) b[i][j]=a[j][m-i+1];
memcpy(a,b,sizeof(b));
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[1][i][j]-dq[0][i][j]<min)
{
min=-dq[1][i][j]-dq[0][i][j];
nr=0;
}
if (-dq[1][i][j]-dq[0][i][j]==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;
}