#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ii pair<int,int>
#define fir first
#define sec second
#define pb push_back
#pragma GCC optimize("O3,unroll-loops")
const int maxn=3e5;
vector<int>adj[maxn+2];
int dsu[maxn+2],n,m,l,bin[maxn+2][20];
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
int con(int a,int b){
return (a-1)*m+b;
}
bool ins(int a,int b){
return (a>0 && b>0 && a<=n && b<=m);
}
vector<array<int,4> >isi;
int fin(int a){
if(dsu[a]==a)return a;
return dsu[a]=fin(dsu[a]);
}
void merg(int a,int b){
a=fin(a),b=fin(b);
if(a==b)return;
dsu[a]=b;
}
int in[maxn+2],out[maxn+2];
int cnt;
void dfs(int cur){
//cout<<cur<<" ";
in[cur]=++cnt;
for(auto x : adj[cur])dfs(x);
out[cur]=cnt;
}
ii blk(int apa){
int hmm=apa%m;
if(hmm==0)hmm=m;
apa-=hmm;
return {apa/m+1,hmm};
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>m>>l;
int grid[n+1][m+1];
bool vis[n+1][m+1];
for(int q=1;q<=n;q++){
for(int w=1;w<=m;w++){
cin>>grid[q][w];
vis[q][w]=false;
dsu[con(q,w)]=con(q,w);
isi.push_back({grid[q][w],0,q,w});
isi.push_back({grid[q][w]+l,1,q,w});
}
}
sort(isi.begin(),isi.end());
for(auto [h,ty,x,y] : isi){
if(ty==0){
for(int e=0;e<4;e++){
int nx=x+dx[e],ny=y+dy[e];
if(!ins(nx,ny) || !vis[nx][ny])continue;
int apa=fin(con(nx,ny));
ii tmp=blk(apa);
// if(h==13)cout<<apa<<" "<<tmp.first<<' '<<tmp.second<<endl;
if(apa!=fin(con(x,y))){
adj[con(x,y)].push_back(apa);
merg(con(nx,ny),con(x,y));
}
}
vis[x][y]=true;
}
else{
bin[con(x,y)][0]=fin(con(x,y));
// cout<<con(x,y)<<" k "<<bin[con(x,y)][0]<<endl;
}
}
for(int q=isi.size()-1;q>=0;q--){
int apa=con(isi[q][2],isi[q][3]);
if(in[apa])continue;
dfs(apa);
}
for(int q=1;q<20;q++){
for(int w=1;w<=n*m;w++){
bin[w][q]=bin[bin[w][q-1]][q-1];
}
}
// cout<<endl;
int qu; cin>>qu;
while(qu--){
int a,b,c,d; cin>>a>>b>>c>>d;
int u=con(a,b),v=con(c,d),ans=0;
int apa=bin[u][0];
if(in[apa]<=in[v] && in[v]<=out[apa]){
cout<<1<<endl; continue;
}
apa=bin[u][19];
if(!(in[apa]<=in[v] && in[v]<=out[apa])){
cout<<-1<<endl; continue;
}
for(int q=19;q>=0;q--){
int apa=bin[u][q];
if(in[apa]<=in[v] && in[v]<=out[apa]){
}
else{
ans+=(1<<q);
u=bin[u][q];
}
}
cout<<ans+1<<endl;
}
}