#include<fstream>
#include<ctype.h>
using namespace std;
const int NMAX = 1001;
ifstream f("struti.in");
ofstream g("struti.out");
unsigned int n,m,intr,dequemin[NMAX],dequemax[NMAX],deque[NMAX];
unsigned short int p[NMAX][NMAX],minp[NMAX][NMAX],maxp[NMAX][NMAX],q[2][11];
char s[NMAX*NMAX*7];
inline void citire(unsigned int &n, unsigned int &m)
{
int nr,j,i;
j=0;
f>>n>>m>>intr;
f.getline(s,7*NMAX*NMAX,EOF);
for(i=1,nr=0;i<=n;i++,nr=0)
for( ;nr<m;j++)
if(isdigit(s[j]))
for(nr=nr+1;isdigit(s[j]);p[i][nr]=p[i][nr]*10+s[j++]-48);
for(i=1;i<=intr;i++) {
for( ;isdigit(s[j])==0;j++);
for( ;isdigit(s[j]);q[0][i]=q[0][i]*10+s[j++]-48);
for( ;isdigit(s[j])==0;j++);
for( ;isdigit(s[j]);q[1][i]=q[1][i]*10+s[j++]-48);
}
f.close();
}
inline void builtmin(int r, int c)
{
int 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];
}
}
}
inline void builtmax(int r, int c)
{
int 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];
}
}
}
inline void solve(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 r,c,i,dmin,nr;
citire(n,m);
for(i=1;i<=intr;i++) {
r=q[0][i];
c=q[1][i];
dmin=(1<<30);
nr=0;
builtmin(r,c);
builtmax(r,c);
solve(r,c,dmin,nr);
if(r!=c) {
swap(r,c);
builtmin(r,c);
builtmax(r,c);
solve(r,c,dmin,nr);
}
g<<dmin<<" "<<nr<<'\n';
}
g.close();
return 0;
}