#include<bits/stdc++.h>
#define int long long
using namespace std;
const int INF=1e18+1;
int lg[100010],s[100010],s2[100010],st[100010][20],st2[100010][20],st3[100010][20],st4[100010][20],st5[100010][20],st6[100010][20];
int query(int l,int r,int op){
int len=lg[r-l+1];
if(op==1){
return max(st[l][len],st[r-(1<<len)+1][len]);
}else if(op==2){
return min(st2[l][len],st2[r-(1<<len)+1][len]);
}else if(op==3){
return max(st3[l][len],st3[r-(1<<len)+1][len]);
}else if(op==4){
return min(st4[l][len],st4[r-(1<<len)+1][len]);
}else if(op==5){
return (min(st5[l][len],st5[r-(1<<len)+1][len])>INF?INF:min(st5[l][len],st5[r-(1<<len)+1][len]));
}
return (max(st6[l][len],st6[r-(1<<len)+1][len])<-INF?INF:max(st6[l][len],st6[r-(1<<len)+1][len]));
}
bool find0(int l,int r,int op){
if(op==1){
return s[r]-s[l-1]>0;
}
return s2[r]-s2[l-1]>0;
}
signed main(){
int n,m,q;
cin>>n>>m>>q;
for(int i=2;i<=max(n,m);i++){
lg[i]=lg[i>>1]+1;
}
memset(st5,0x3f,sizeof(st5));
memset(st6,-0x3f,sizeof(st6));
for(int i=1;i<=n;i++){
cin>>st[i][0];
s[i]=s[i-1];
if(st[i][0]==0)s[i]++;
st2[i][0]=st[i][0];
if(st[i][0]>=0)st5[i][0]=st[i][0];
if(st[i][0]<=0)st6[i][0]=st[i][0];
}
for(int i=1;i<=m;i++){
cin>>st3[i][0];
s2[i]=s2[i-1];
if(st3[i][0]==0)s2[i]++;
st4[i][0]=st3[i][0];
}
for(int j=1;j<=lg[n];j++){
for(int i=1;i<=n-(1<<j)+1;i++){
st[i][j]=max(st[i][j-1],st[i+(1<<(j-1))][j-1]);
st2[i][j]=min(st2[i][j-1],st2[i+(1<<(j-1))][j-1]);
st5[i][j]=min(st5[i][j-1],st5[i+(1<<(j-1))][j-1]);
st6[i][j]=max(st6[i][j-1],st6[i+(1<<(j-1))][j-1]);
}
}
for(int j=1;j<=lg[m];j++){
for(int i=1;i<=m-(1<<j)+1;i++){
st3[i][j]=max(st3[i][j-1],st3[i+(1<<(j-1))][j-1]);
st4[i][j]=min(st4[i][j-1],st4[i+(1<<(j-1))][j-1]);
}
}
while(q--){
int l,r,l2,r2,ans=-1;
cin>>l>>r>>l2>>r2;
if(query(l2,r2,4)>=0){
ans=query(l,r,1)*query(l2,r2,4);
}else if(query(l2,r2,3)<=0){
if(query(l,r,2)>0)ans=query(l,r,2)*query(l2,r2,4);
else ans=query(l,r,2)*query(l2,r2,3);
}else{
if(query(l,r,5)==INF||query(l2,r2,4)==INF)ans=query(l,r,6)*query(l2,r2,3);
else if(query(l,r,6)==INF||query(l2,r2,3)==INF)ans=query(l,r,5)*query(l2,r2,4);
else ans=max(query(l,r,5)*query(l2,r2,4),query(l,r,6)*query(l2,r2,3));
}
if(find0(l,r,1)&&ans<0)ans=0;
if(find0(l2,r2,2)&&ans>0)ans=0;
cout<<ans<<endl;
}
return 0;
}
link,心态炸了