#include <stdio.h>
#include <deque>
#define MAX 1000
FILE *fin,*fout;
int n,m,t[MAX][MAX],min[MAX][MAX],max[MAX][MAX],min1[MAX][MAX],max1[MAX][MAX];
void sol(int dx, int dy){
int i,j,a,b;
std::deque<int>dqmin;
std::deque<int>dqmax;
for(i=0; i<m; i++){
for(j=0; j<dy; j++){
while(!dqmin.empty() && dqmin.back()>t[i][j])
dqmin.pop_back();
if(dqmin.empty() || dqmin.back()<=t[i][j])
dqmin.push_back(t[i][j]);
while(!dqmax.empty() && dqmax.back()<t[i][j])
dqmax.pop_back();
if(dqmax.empty() || dqmax.back()>=t[i][j])
dqmax.push_back(t[i][j]);
}
min[i][0]=dqmin.front();
max[i][0]=dqmax.front();
for(j=dy; j<n; j++){
if(dqmin.front()==t[i][j-dy])
dqmin.pop_front();
if(dqmax.front()==t[i][j-dy])
dqmax.pop_front();
while(!dqmin.empty() && dqmin.back()>t[i][j])
dqmin.pop_back();
if(dqmin.empty() || dqmin.back()<=t[i][j])
dqmin.push_back(t[i][j]);
while(!dqmax.empty() && dqmax.back()<t[i][j])
dqmax.pop_back();
if(dqmax.empty() || dqmax.back()>=t[i][j])
dqmax.push_back(t[i][j]);
min[i][j-dy+1]=dqmin.front();
max[i][j-dy+1]=dqmax.front();
}
dqmin.clear();
dqmax.clear();
}
//for(a=0; a<m; a++){for(b=0; b<=n-dy; b++)fprintf(fout,"%d ",min[a][b]);
//fprintf(fout,"\n");}fprintf(fout,"\n");
//for(a=0; a<m; a++){for(b=0; b<=n-dy; b++)fprintf(fout,"%d ",max[a][b]);
//fprintf(fout,"\n");}fprintf(fout,"\n");fprintf(fout,"\n");
for(j=0; j<=n-dy; j++){
for(i=0; i<dx; i++){
while(!dqmin.empty() && dqmin.back()>min[i][j])
dqmin.pop_back();
if(dqmin.empty() || dqmin.back()<=min[i][j])
dqmin.push_back(min[i][j]);
while(!dqmax.empty() && dqmax.back()<max[i][j])
dqmax.pop_back();
if(dqmax.empty() || dqmax.back()>=max[i][j])
dqmax.push_back(max[i][j]);
}
min1[0][j]=dqmin.front();
max1[0][j]=dqmax.front();
for(i=dx; i<m; i++){
if(dqmin.front()==min[i-dx][j])
dqmin.pop_front();
if(dqmax.front()==max[i-dx][j])
dqmax.pop_front();
while(!dqmin.empty() && dqmin.back()>min[i][j])
dqmin.pop_back();
if(dqmin.empty() || dqmin.back()<=min[i][j])
dqmin.push_back(min[i][j]);
while(!dqmax.empty() && dqmax.back()<max[i][j])
dqmax.pop_back();
if(dqmax.empty() || dqmax.back()>=max[i][j])
dqmax.push_back(max[i][j]);
min1[i-dx+1][j]=dqmin.front();
max1[i-dx+1][j]=dqmax.front();
}
dqmin.clear();
dqmax.clear();
}
//for(a=0; a<=m-dx; a++){for(b=0; b<=n-dy; b++)fprintf(fout,"%d ",min1[a][b]);
//fprintf(fout,"\n");}fprintf(fout,"\n");
//for(a=0; a<=m-dx; a++){for(b=0; b<=n-dy; b++)fprintf(fout,"%d ",max1[a][b]);
//fprintf(fout,"\n");}fprintf(fout,"\n");fprintf(fout,"\n");
}
int main(){
fin=fopen("struti.in","r");
fout=fopen("struti.out","w");
int p,i,j,k,minim,ap,dx,dy;
fscanf(fin,"%d%d%d",&m,&n,&p);
for(i=0; i<m; i++)
for(j=0; j<n; j++)
fscanf(fin,"%d",&t[i][j]);
for(k=0; k<p; k++){
minim=1000000000;
ap=0;
fscanf(fin,"%d%d",&dx,&dy);
sol(dx,dy);
for(i=0; i<=m-dx; i++)
for(j=0; j<=n-dy; j++)
if(max1[i][j]-min1[i][j]<minim){
minim=max1[i][j]-min1[i][j];
ap=1;
}else if(max1[i][j]-min1[i][j]==minim)
ap++;
if(dx!=dy){
sol(dy,dx);
for(i=0; i<=m-dy; i++)
for(j=0; j<=n-dx; j++)
if(max1[i][j]-min1[i][j]<minim){
minim=max1[i][j]-min1[i][j];
ap=1;
}else if(max1[i][j]-min1[i][j]==minim)
ap++;
}
fprintf(fout,"%d %d\n",minim,ap);
}
fclose(fin);
fclose(fout);
return 0;
}