#include <cstdio>
#include <cstring>
using namespace std;
int dxx,dyy,p,d[1010],s,v1[1010],v2[1010],vmax[1010],vmin[1010];
int dm,dm1,dm2,sx[1010],jx[1010],sn[1010],jn[1010],sus,jos,rmax[1010],rmin[1010];
int sol,sol1,sol2;
short int v[1010][1010],i,j,n,m,dx[1010][1010],dn[1010][1010];
char str[1500000];
void barbut(int dxx, int dyy){
int i,j;
for (i=1;i<=m;i++){
sx[i]=jx[i]=sn[i]=jn[i]=1;
dx[1][i]=1;
dn[1][i]=1;
}
for (i=2;i<=n;i++){
if (i>dxx){
//scot ce nu mai am nevoie, adica elementu de pe coloana j linia i-dxx
for (j=1;j<=m;j++){
//pt max
while ((dx[jx[j]][j]<=(i-dxx))&&(jx[j]<=sx[j]))
jx[j]++;
//pt min
while ((dn[jn[j]][j]<=(i-dxx))&&(jn[j]<=sn[j]))
jn[j]++;
}
}
//bag elementu de pe linia curenta in dequeul lui
for (j=1;j<=m;j++){
//tre sa adaug v[i][j]
//deque de max:
while ((v[i][j]>v[dx[sx[j]][j]][j])&&(sx[j]>=jx[j]))
sx[j]--;
sx[j]++;
dx[sx[j]][j]=i;
//deque de min
while ((v[i][j]<v[dn[sn[j]][j]][j])&&(sn[j]>=jn[j]))
sn[j]--;
sn[j]++;
dn[sn[j]][j]=i;
vmax[j]=v[dx[jx[j]][j]][j];
vmin[j]=v[dn[jn[j]][j]][j];
}
// for (j=1;j<=m;j++)
// printf("%d ",dx[i][j]);
// printf("\n");
// printf("\n");
if (i>=dxx){
//balotez deque-urile de pe linie
//pt maxim
jos=sus=1;
d[1]=1;
for (j=2;j<=m;j++){
if (j>dyy)
while ((d[jos]<=j-dyy)&&(jos<=sus))
jos++;
while ((vmax[j]>vmax[d[sus]])&&(sus>=jos))
sus--;
sus++;
d[sus]=j;
if (j>=dyy)
rmax[j]=vmax[d[jos]];
}
//pt minim
// memset(d,0,sizeof(d));
jos=sus=1;
d[1]=1;
for (j=2;j<=m;j++){
if (j>dyy)
while ((d[jos]<=j-dyy)&&(jos<=sus))
jos++;
while ((vmin[j]<vmin[d[sus]])&&(sus>=jos))
sus--;
sus++;
d[sus]=j;
if (j>=dyy)
rmin[j]=vmin[d[jos]];
}
//calculez diferentele intre max-uri si min-uri si compar cu ce am pana acum
// printf("%d\n\n",dm);
for (j=dyy;j<=m;j++){
// printf("%d %d\n",rmax[j],rmin[j]);
if ((rmax[j]-rmin[j])==dm)
sol++;
if ((rmax[j]-rmin[j])<dm){
dm=rmax[j]-rmin[j];
// printf("%d\n",dm);
sol=1;
}
}
}
}
// printf("%d\n",dm);
}
int main(){
freopen("struti.in","r",stdin);
freopen("struti.out","w",stdout);
scanf("%hd%hd%d ",&n,&m,&p);
int nr,sz;
for (i=1;i<=n;i++){
fgets(str,1100000,stdin);
// fputs(str,stdout);
// printf("%d\n",i);
nr=1;
sz=strlen(str);
for (j=0;j<sz;j++){
if ((str[j]>='0')&&(str[j]<='9'))
v[i][nr]=v[i][nr]*10+str[j]-48;
else
nr++;
// printf("%d ",v[i][nr]);
}
}
for (i=1;i<=p;i++){
scanf("%d%d",&dxx,&dyy);
if ((dxx==1)&&(dyy==1))
printf("0 %d\n",n*m);
else {
dm=dm1=dm2=2000000000;
sol=0;
barbut(dxx,dyy);
dm1=dm;
sol1=sol;
if (dxx!=dyy){
dm=2000000000;
sol=0;
barbut(dyy,dxx);
dm2=dm;
sol2=sol;
}
if (dm1==dm2){
sol=sol1+sol2;
dm=dm1;
}
if (dm1<dm2){
sol=sol1;
dm=dm1;
}
if (dm2<dm1){
sol=sol2;
dm=dm2;
}
printf("%d %d\n",dm,sol);
}
}
return 0;
}