#include <bits/stdc++.h>
#define int long long
#define mid ((l+r)>>1)
#define ls (i<<1)
#define rs (i<<1|1)
#define update(kkksc03) {kkksc03=kkksc03*(kkksc03>=0?bminv:bmaxv);}
using namespace std;
int n,m,q;
const int N = 1e5+5;
struct RangedMaximum{
int maxt[N<<2];
void pushup(int i){
maxt[i]=max(maxt[ls],maxt[rs]);
}
void Build(int i,int l,int r,int *a){
if(l==r){
maxt[i]=a[l];
return;
}
Build(ls,l,mid,a);
Build(rs,mid+1,r,a);
pushup(i);
}
void build(int *a,int n){
memset(maxt,0x8f,sizeof(maxt));
Build(1,1,n,a);
}
int Query(int ql,int qr,int i,int l,int r){
if(ql<=l&&r<=qr){
return maxt[i];
}
int value=-1e9-7;
if(ql<=mid){
value=max(value,Query(ql,qr,ls,l,mid));
}
if(qr>mid){
value=max(value,Query(ql,qr,rs,mid+1,r));
}
return value;
}
int query(int l,int r,int n){
return Query(l,r,1,1,n);
}
};
struct RangedMinimum{
int maxt[N<<2];
void pushup(int i){
maxt[i]=min(maxt[ls],maxt[rs]);
}
void Build(int i,int l,int r,int *a){
if(l==r){
maxt[i]=a[l];
return;
}
Build(ls,l,mid,a);
Build(rs,mid+1,r,a);
pushup(i);
}
void build(int *a,int n){
memset(maxt,0x3f,sizeof(maxt));
Build(1,1,n,a);
}
int Query(int ql,int qr,int i,int l,int r){
if(ql<=l&&r<=qr){
return maxt[i];
}
int value=1e9+7;
if(ql<=mid){
value=min(value,Query(ql,qr,ls,l,mid));
}
if(qr>mid){
value=min(value,Query(ql,qr,rs,mid+1,r));
}
return value;
}
int query(int l,int r,int n){
return Query(l,r,1,1,n);
}
};
RangedMaximum amax,bmax,anmax;
RangedMinimum amin,apmin,bmin;
int a[N],b[N],ap[N],an[N];
signed main(){
cin>>n>>m>>q;
for(int i=1;i<=n;i++){
cin>>a[i];
an[i]=ap[i]=a[i];
if(a[i]>=0)an[i]=-1e9-7;
else ap[i]=1e9+7;
}
for(int i=1;i<=m;i++){
cin>>b[i];
}
amax.build(a,n);
amin.build(a,n);
bmax.build(b,m);
anmax.build(an,n);
apmin.build(ap,n);
bmin.build(b,m);
while(q--){
int l1,r1,l2,r2;
cin>>l1>>r1>>l2>>r2;
int amaxv=amax.query(l1,r1,n);
int aminxv=amin.query(l1,r1,n);
int anmaxv=anmax.query(l1,r1,n);
int apminv=apmin.query(l1,r1,n);
int bmaxv=bmax.query(l2,r2,m);
int bminv=bmin.query(l2,r2,m);
update(amaxv);
update(aminxv);
update(anmaxv);
update(apminv);
cout<<max({amaxv,aminxv,anmaxv,apminv})<<'\n';
}
return 0;
}