#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");
string s;
istringstream in;
pair<int,int> minim;
int n,m,a[1005][1005],b[1005][1005],c[1005][1005];
void comp(int x)
{
if (x<minim.fs)
minim=mp(x,0);
if (x==minim.fs)
minim.ss++;
// printf("comp=%d minim=%d %d\n",x,minim.fs);
}
void precalc_lini(int x)
{
int i,j;
deque <pair<int,int> > qmin,qmax;
FOR(i,1,m)
{
qmin.resize(0);
qmax.resize(0);
FOR(j,1,x)
{
while ((!qmin.empty())&&qmin.back().fs>=a[i][j])
qmin.popb();
qmin.pb(mp(a[i][j],j));
while ((!qmax.empty())&&qmax.back().fs<=a[i][j]&&!qmax.empty())
qmax.popb();
qmax.pb(mp(a[i][j],j));
}
b[i][1]=qmin.front().fs;
// printf("%d ",b[i][1]);
c[i][1]=qmax.front().fs;
FOR(j,x+1,n)
{
while ((!qmin.empty())&&j-qmin.front().ss>=x)
qmin.popf();
while ((!qmin.empty())&&qmin.back().fs>=a[i][j])
qmin.popb();
while ((!qmax.empty())&&j-qmax.front().ss>=x)
qmax.popf();
while ((!qmax.empty())&&qmax.back().fs<=a[i][j])
qmax.popb();
qmin.pb(mp(a[i][j],j));
qmax.pb(mp(a[i][j],j));
b[i][j-x+1]=qmin.front().fs;
c[i][j-x+1]=qmax.front().fs;
// printf("%d ",b[i][j-x+1]);
}
// printf("\n");
}
}
void search(int x,int y)
{
int i,j;
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
precalc_lini(x);
/*printf("%d %d\n",n,m);
FOR (i,1,3)
{
FOR(j,1,7)
printf("%d ",a[i][j]);
printf("\n");
}*/
deque<pair<int,int> > qmin,qmax;
FOR(j,1,n-x+1)
{
qmin.resize(0);
qmax.resize(0);
FOR(i,1,y)
{
while ((!qmin.empty())&&qmin.back().fs>=b[i][j])
qmin.popb();
qmin.pb(mp(b[i][j],i));
while ((!qmax.empty())&&qmax.back().fs<=c[i][j])
qmax.popb();
qmax.pb(mp(c[i][j],i));
}
comp(qmax.front().fs-qmin.front().fs);
// printf("%d %d %d\n",1,j,minim.fs);
FOR(i,y+1,m)
{
while ((!qmin.empty())&&i-qmin.front().ss>=y)
qmin.popf();
while ((!qmin.empty())&&qmin.back().fs>=b[i][j])
qmin.popb();
while ((!qmax.empty())&&i-qmax.front().ss>=y)
qmax.popf();
while ((!qmax.empty())&&qmax.back().fs<=c[i][j])
qmax.popb();
qmin.pb(mp(b[i][j],i));
qmax.pb(mp(c[i][j],i));
comp(qmax.front().fs-qmin.front().fs);
// printf("%d %d %d\n",i-y+1,j,minim.fs);
}
}
}
int main()
{
FILE *out;
int i,j,p,x,y;
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[i][j];
FOR(i,1,p)
{
in>>x>>y;
minim=mp(1<<30,0);
search(x,y);
if (x!=y)
search(y,x);
fprintf(out,"%d %d\n",minim.fs,minim.ss);
}
fclose(out);
return 0;
}