#include<stdio.h>
#include<string>
FILE*f=fopen("struti.in","r");
FILE*g=fopen("struti.out","w");
int n,m,p,i,j,a[1005][1005],deque[1005],dx,dy,maxim[1005][1005],ii,prelmax[1005][1005];
int front, back,minim[1005][1005],prelmin[1005][1005],aux,nr,min; int deque2[1005];
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 ( ii = 1; ii <= p ; ii++){
fscanf( f, "%d %d ",&dx,&dy);
min = 9999999; nr = 0;
for ( j = 1; j <= m ; ++j){
front = 1; back = 0; memset(deque,0,sizeof(deque));
//front2 = 1; back2 = 0; memset(deque2,0,sizeof(deque2));
for ( i = 1 ; i <= n ; ++i ) {
while ( front <= back && a[i][j] > a[ deque[back ] ][j] )
back --;
deque[++back] = i;
if ( deque[front] == i - dx )
front ++;
if(i>=dx)
maxim[i-dx+1][j] = a [ deque[front]][j];
/*while(front2 <= back && a[i][j] > a[deque2[back2]][j])
back --;
deque2 [++back2] = i;
if( deque2[front2] == i - dy)
front2++;
if( i >= dy)
*/
}
}
for ( i = 1; i <= n ; ++i ){
front = 1; back = 0; memset(deque,0,sizeof(deque));
for( j = 1 ; j <= m ; ++j) {
while ( front <= back && maxim[i][j] > maxim [i][deque[back]])
back --;
deque [++back] = j;
if( deque[front] == j-dy)
front ++;
if(j >= dy)
prelmax[i][j-dy+1] = maxim[ i ][ deque[front]];
}
}
for ( j = 1; j <= m ; ++j){
front = 1; back = 0; memset(deque,0,sizeof(deque));
for ( i = 1; i <= n ; ++i){
while ( front <= back && a[i][j] < a[ deque[ back ] ][j])
back --;
deque[ ++back ] = i;
if ( deque[front] == i - dx )
front ++;
if(i>=dx)
minim[i-dx+1][j] = a [ deque[front]][j];
}
}
for ( i = 1; i <= n; ++i ){
front = 1; back = 0; memset(deque,0,sizeof(deque));
for ( j = 1 ; j <= m ; j++){
while ( front <= back && minim[i][j] < minim [i][ deque[back]])
back --;
deque[ ++back ] = j;
if( deque[front] == j-dy)
front ++;
if(j >= dy)
prelmin[i][j-dy+1] = minim[ i ][ deque[front]];
}
}
//aici
for( i = 1; i <= n - dx + 1 ; ++i ){
for ( j = 1; j <= m - dy +1 ; ++j){
if(prelmax[i][j] - prelmin [i][j] < min)
min = prelmax[i][j] - prelmin [i][j], nr = 1;
else
if(prelmax[i][j] - prelmin[i][j] == min)
nr++;
}
}
if( dx == dy ){
fprintf(g, "%d %d\n", min, nr);
continue;
}
aux = dx;
dx = dy;
dy = aux;
memset(prelmin,0,sizeof(prelmin));
memset(prelmax,0,sizeof(prelmax));
for ( j = 1; j <= m ; ++j){
front = 1; back = 0; memset(deque,0,sizeof(deque));
//front2 = 1; back2 = 0; memset(deque2,0,sizeof(deque2));
for ( i = 1 ; i <= n ; ++i ) {
while ( front <= back && a[i][j] > a[ deque[back ] ][j] )
back --;
deque[++back] = i;
if ( deque[front] == i - dx )
front ++;
if(i>=dx)
maxim[i-dx+1][j] = a [ deque[front]][j];
/*while(front2 <= back && a[i][j] > a[deque2[back2]][j])
back --;
deque2 [++back2] = i;
if( deque2[front2] == i - dy)
front2++;
if( i >= dy)
*/
}
}
for ( i = 1; i <= n ; ++i ){
front = 1; back = 0; memset(deque,0,sizeof(deque));
for( j = 1 ; j <= m ; ++j) {
while ( front <= back && maxim[i][j] > maxim [i][deque[back]])
back --;
deque [++back] = j;
if( deque[front] == j-dy)
front ++;
if(j >= dy)
prelmax[i][j-dy+1] = maxim[ i ][ deque[front]];
}
}
for ( j = 1; j <= m ; ++j){
front = 1; back = 0; memset(deque,0,sizeof(deque));
for ( i = 1; i <= n ; ++i){
while ( front <= back && a[i][j] < a[ deque[ back ] ][j])
back --;
deque[ ++back ] = i;
if ( deque[front] == i - dx )
front ++;
if(i>=dx)
minim[i-dx+1][j] = a [ deque[front]][j];
}
}
for ( i = 1; i <= n; ++i ){
front = 1; back = 0; memset(deque,0,sizeof(deque));
for ( j = 1 ; j <= m ; j++){
while ( front <= back && minim[i][j] < minim [i][ deque[back]])
back --;
deque[ ++back ] = j;
if( deque[front] == j-dy)
front ++;
if(j >= dy)
prelmin[i][j-dy+1] = minim[ i ][ deque[front]];
}
}
//aici
for( i = 1; i <= n - dx + 1 ; ++i ){
for ( j = 1; j <= m - dy +1 ; ++j){
if(prelmax[i][j] - prelmin [i][j] < min)
min = prelmax[i][j] - prelmin [i][j], nr = 1;
else
if(prelmax[i][j] - prelmin[i][j] == min)
nr++;
}
}
fprintf(g, "%d %d\n", min, nr);
}
fclose(f);
fclose(g);
return 0;
}