#include <fstream>
#include <stdlib.h>
#define nm 1005
using namespace std;
fstream f1("struti.in", ios::in);
fstream f2("struti.out", ios::out);
int n, m, p, a[nm][nm], dmax[nm][nm], dmin[nm][nm], pmin[nm], umin[nm], deqmax[nm][nm], pmax[nm], umax[nm];
int minox[nm], maxox[nm], amax[nm], amin[nm];
///deqmin[j][k]=linia celui de-al k-lea cand pt min din deque pt coloana j pt secv [i-dx+1..i]
int difmin(int dy, int &nraux)
{
int mini=160000, i, primmax=1, primmin=1, ultimmax=0, ultimmin=0;
for(i=1; i<=m; i++) ///afli simultan min si max pt fiecare secv de lung dy, min si max pt secv cu indici [i-dy+1, i]
{
while((primmin<=ultimmin)&&(minox[amin[ultimmin]]>=minox[i])) ultimmin--;
ultimmin++;
amin[ultimmin]=i;
if((primmin<=ultimmin)&&(amin[primmin]==i-dy)) primmin++;
while((primmax<=ultimmax)&&(maxox[amax[ultimmax]]<=maxox[i])) ultimmax--;
ultimmax++;
amax[ultimmax]=i;
if((primmax<=ultimmax)&&(amax[primmax]==i-dy)) primmax++;
if((i>=dy)&&(primmax<=ultimmax)&&(primmin<=ultimmin)&&(mini> abs(maxox[amax[primmax]]-minox[amin[primmin]])))
{
mini= abs(maxox[amax[primmax]]-minox[amin[primmin]]);
nraux=1;
}
else if((i>=dy)&&(primmax<=ultimmax)&&(primmin<=ultimmin)&&(mini== abs(maxox[amax[primmax]]-minox[amin[primmin]])))
{
nraux++;
}
}
return mini;
}
int solve(int dx, int dy, int &mini, int&nr)
{
int i, j, rezcur, nraux;
mini=160000;
for(i=1; i<=m; i++) {pmin[i]=1; umin[i]=0;pmax[i]=1; umax[i]=0;}
for(i=1; i<=n; i++)
{
///pt minim : dmin[j][pmin[j]] min de pe col j, de pe bucata de secv i-dx+1, i
for(j=1; j<=m; j++)
{
while((pmin[j]<=umin[j])&&(a[dmin[j][umin[j]]][j]>= a[i][j])) umin[j]--;
umin[j]++;
dmin[j][umin[j]]=i;
if((pmin[j]<=umin[j])&&(dmin[j][pmin[j]]==i-dx)) pmin[j]++;
if(i>=dx) minox[j]=a[dmin[j][pmin[j]]][j];
}
///pt maxim
for(j=1; j<=m; j++)
{
while((pmax[j]<=umax[j])&&(a[dmax[j][umax[j]]][j]<= a[i][j])) umax[j]--;
umax[j]++;
dmax[j][umax[j]]=i;
if((pmax[j]<=umax[j])&&(dmax[j][pmax[j]]==i-dx)) pmax[j]++;
if(i>=dx) maxox[j]=a[dmax[j][pmax[j]]][j];
}
if(i>=dx)
{
nraux=0;
rezcur=difmin(dy, nraux);
if(rezcur< mini) {mini=rezcur;nr=nraux;}
else if(rezcur==mini) nr+=nraux;
}
}
return mini;
}
void citire()
{
int i, j, dx, dy, mini1, mini2, nr1, nr2;
f1>>n>>m>>p;
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
f1>>a[i][j];
for(i=1; i<=p; i++)
{
f1>>dx>>dy;
if(dx!=dy)
{
nr1=nr2=0;
solve(dx, dy, mini1, nr1);
solve(dy, dx, mini2, nr2);
if(mini1< mini2) f2<<mini1<<' '<<nr1<<"\n";
else if(mini1==mini2) f2<<mini1<<' '<<nr1+nr2<<"\n";
else f2<<mini2<<' '<<nr2<<"\n";
}
else
{
nr1=0;
solve(dx, dy, mini1, nr1);
f2<<mini1<<' '<<nr1<<"\n";
}
}
}
int main()
{
citire();
return 0;
}