#include<iostream>
#include<fstream>
using namespace std;
const int NMAX = 1001;
int p[NMAX][NMAX],minp[NMAX][NMAX],maxp[NMAX][NMAX],dequemin[NMAX],dequemax[NMAX];
void builtmin(int n, int m, int r, int c)
{
int deque[NMAX],st,dr,i,j;
for(j=1;j<=m;j++) {
st=1;
dr=0;
for(i=1;i<=n;i++) {
while(st<=dr && p[deque[dr]][j]>p[i][j])
dr--;
deque[++dr]=i;
if(i-r>=deque[st])
st++;
if(i>=r)
minp[i-r+1][j]=p[deque[st]][j];
}
}
}
void builtmax(int n, int m, int r, int c)
{
int deque[NMAX],st,dr,i,j;
for(j=1;j<=m;j++) {
st=1;
dr=0;
for(i=1;i<=n;i++) {
while(st<=dr && p[deque[dr]][j]<p[i][j])
dr--;
deque[++dr]=i;
if(i-r>=deque[st])
st++;
if(i>=r)
maxp[i-r+1][j]=p[deque[st]][j];
}
}
}
void solve(int n, int m, int r, int c, int &dmin, int &nr)
{
int i,j,stmin,drmin,stmax,drmax,d;
for(i=1;i<=n-r+1;i++) {
stmin=stmax=1;
drmin=drmax=0;
for(j=1;j<=m;j++) {
while(stmin<=drmin && minp[i][dequemin[drmin]]>minp[i][j])
drmin--;
dequemin[++drmin]=j;
while(stmax<=drmax && maxp[i][dequemax[drmax]]<maxp[i][j])
drmax--;
dequemax[++drmax]=j;
if(j-c>=dequemin[stmin])
stmin++;
if(j-c>=dequemax[stmax])
stmax++;
if(j>=c) {
d=maxp[i][dequemax[stmax]]-minp[i][dequemin[stmin]];
if(d<dmin) {
dmin=d;
nr=1;
}
else if(d==dmin)
nr++;
}
}
}
}
int main ()
{
int n,m,r,c,i,j,dmin,nr,k;
ifstream f("struti.in");
ofstream g("struti.out");
f>>n>>m>>k;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
f>>p[i][j];
for(i=1;i<=k;i++) {
f>>r>>c;
dmin=(1<<30);
nr=0;
builtmin(n,m,r,c);
builtmax(n,m,r,c);
solve(n,m,r,c,dmin,nr);
if(r!=c) {
swap(r,c);
builtmin(n,m,r,c);
builtmax(n,m,r,c);
solve(n,m,r,c,dmin,nr);
}
g<<dmin<<" "<<nr<<'\n';
}
f.close();
g.close();
return 0;
}