#include <cstdio>
#include <vector>
#include <queue>
#include <stack>
#include <list>
#include <set>
#include <algorithm>
#include <utility>
#include <string>
#include <functional>
#include <sstream>
#include <fstream>
#include <iostream>
using namespace std;
#define FOR(i,a,b) for (i=a;i<=b;i++)
#define fori(it,v) for (it=(v).begin();it!=(v).end();it++)
#define pb push_back
#define mp make_pair
#define fs first
#define ss second
#define all(c) c.begin(),c.end()
#define pf push_front
#define popb pop_back
#define popf pop_front
ifstream fin("struti.in");
istringstream in;
string s;
int a[10][10][1002][1002],b[10][10][1002][1002];
int log[1010],put[20],n,m;
int min(int x,int y,int z,int t)
{
return min(x,min(y,min(z,t)));
}
int max(int x,int y,int z,int t)
{
return max(x,max(y,max(z,t)));
}
int recmin(int k,int t,int i, int j)
{
if (k==0&&t==0)
return a[k][t][i][j];
if (k==0)
return min(a[k][t-1][i][j],a[k][t-1][i][j+put[t-1]]);
if (t==0)
return min(a[k-1][t][i][j],a[k-1][t][i+put[k-1]][j]);
return min(a[k-1][t-1][i][j],a[k-1][t-1][i+put[k-1]][j],a[k-1][t-1][i][j+put[t-1]],a[k-1][t-1][i+put[k-1]][j+put[t-1]]);
}
int recmax(int k,int t,int i, int j)
{
if (k==0&&t==0)
return b[k][t][i][j];
if (k==0)
return max(b[k][t-1][i][j],b[k][t-1][i][j+put[t-1]]);
if (t==0)
return max(b[k-1][t][i][j],b[k-1][t][i+put[k-1]][j]);
return max(b[k-1][t-1][i][j],b[k-1][t-1][i+put[k-1]][j],b[k-1][t-1][i][j+put[t-1]],b[k-1][t-1][i+put[k-1]][j+put[t-1]]);
}
pair<int,int> search(int x,int y)
{
int i,j;
pair<int,int> minim=mp(1<<30,0);
FOR(i,1,m)
FOR(j,1,n)
{
if(i-1+x<=m&&j-1+y<=n)
{
int val=max(b[log[x]][log[y]][i][j],b[log[x]][log[y]][i+x-put[log[x]]][j],b[log[x]][log[y]][i][j+y-put[log[y]]],b[log[x]][log[y]][i+x-put[log[x]]][j+y-put[log[y]]])-min(a[log[x]][log[y]][i][j],a[log[x]][log[y]][i+x-put[log[x]]][j],a[log[x]][log[y]][i][j+y-put[log[y]]],a[log[x]][log[y]][i+x-put[log[x]]][j+y-put[log[y]]]);
// printf("%d %d %d %d %d\n",i,j,x,y,val);
if (val<minim.fs)
{
//printf("%d %d %d %d %d\n",i,j,x,y,val);
minim=mp(val,0);
}
if (val==minim.fs)
minim.ss++;
}
if (x!=y)
{
swap(x,y);
if(i+x-1<=m&&j+y-1<=n)
{
int val=max(b[log[x]][log[y]][i][j],b[log[x]][log[y]][i+x-put[log[x]]][j],b[log[x]][log[y]][i][j+y-put[log[y]]],b[log[x]][log[y]][i+x-put[log[x]]][j+y-put[log[y]]])-min(a[log[x]][log[y]][i][j],a[log[x]][log[y]][i+x-put[log[x]]][j],a[log[x]][log[y]][i][j+y-put[log[y]]],a[log[x]][log[y]][i+x-put[log[x]]][j+y-put[log[y]]]);
// printf("%d %d %d %d %d\n",i,j,x,y,val);
if (val<minim.fs)
{
minim=mp(val,0);
// printf("%d %d %d %d %d\n",i,j,x,y,val);
}
if (val==minim.fs)
minim.ss++;
}
swap(x,y);
}
}
// printf("%d %d\n",x,y);
return minim;
}
int main()
{
int p,i,j,k,t,x,y;
FILE *out;
out=fopen("struti.out","w");
getline(fin,s,'\0');
in.str(s);
in>>m>>n>>p;
FOR(i,1,m)
FOR(j,1,n)
{
in>>a[0][0][i][j];
b[0][0][i][j]=a[0][0][i][j];
}
x=1;
y=0;
FOR(i,1,1005) //calc log si put
{
if (x==i)
{
x*=2;
y++;
}
log[i]=y-1;
}
put[0]=1;
for(i=1;i<=10;i++)
put[i]=put[i-1]*2;
FOR(k,1,log[m])
FOR(t,1,log[n])
FOR(i,1,m-put[k]+1)
FOR(j,1,n-put[t]+1)
{
a[k][t][i][j]=recmin(k,t,i,j);
b[k][t][i][j]=recmax(k,t,i,j);
}
// printf("a[%d][%d][%d][%d]=%d\n",1,1,1,1,b[1][1][1][1]);
FOR(i,1,p)
{
in>>x>>y;
pair<int,int> r1;
r1=search(x,y);
fprintf(out,"%d %d\n",r1.fs,r1.ss);
}
fclose(out);
return 0;
}