#include <bits/stdc++.h>
using namespace std;
int n,m,q;
int a[100010],b[100010];
int sum[100010][5];
int search1(int flag,int way,int l,int r){
int ans=0;
if(!flag){
if(way)ans=-1000000000;
}else{
if(!way)ans=1000000000;
}
for(int i=l;i<=r;i++){
if(!flag){
if(a[i]<0&&!way)ans=min(ans,a[i]);
if(a[i]<0&&way)ans=max(ans,a[i]);
}else{
if(a[i]>0&&way)ans=max(ans,a[i]);
if(a[i]>0&&!way)ans=min(ans,a[i]);
}
}
return ans;
}
int search2(int flag,int way,int l,int r){
int ans=0;
if(!flag){
if(way)ans=-1000000000;
}else{
if(!way)ans=1000000000;
}
for(int i=l;i<=r;i++){
if(!flag){
if(b[i]<0&&!way)ans=min(ans,b[i]);
if(b[i]<0&&way)ans=max(ans,b[i]);
}else{
if(b[i]>0&&way)ans=max(ans,b[i]);
if(b[i]>0&&!way)ans=min(ans,b[i]);
}
}
return ans;
}
int main(){
cin>>n>>m>>q;
for(int i=1;i<=n;i++){
sum[i][1]=sum[i-1][1];sum[i][2]=sum[i-1][2];
cin>>a[i];
if(!a[i])sum[i][1]=sum[i-1][1]+1;
if(a[i]<0)sum[i][2]=sum[i-1][2]+1;
}
for(int i=1;i<=m;i++){
sum[i][3]=sum[i-1][3];sum[i][4]=sum[i-1][4];
cin>>b[i];
if(!b[i])sum[i][3]=sum[i-1][3]+1;
if(b[i]<0)sum[i][4]=sum[i-1][4]+1;
}
int l1,l2,r1,r2;
int ct1[5],ct2[5],ans[q+1];
for(int i=1;i<=q;i++){
cin>>l1>>r1>>l2>>r2;
ct1[1]=sum[r1][1]-sum[l1-1][1];ct1[2]=sum[r1][2]-sum[l1-1][2];
ct2[1]=sum[r2][3]-sum[l2-1][3];ct2[2]=sum[r2][4]-sum[l2-1][4];
if(ct2[1]==r2-l2+1||ct1[1]==r1-l1+1)ans[i]=0 ;
else if(ct2[1]&&ct2[2]&&ct2[1]+ct2[2]!=0){
if(ct1[1]&&ct1[2]&&ct1[1]+ct1[2]!=0)ans[i]=0 ;
else if(ct1[1]&&!ct1[2])ans[i]=0 ;
else if(ct1[1]&&ct1[2])ans[i]=0 ;
else if(ct1[2]&&!ct1[1])ans[i]=min(search1(1,0,l1,r1)*search2(0,1,l2,r2),search1(0,0,l1,r1)*search2(1,1,l2,r2)) ;
else if(!ct1[1]&&!ct1[2])ans[i]=search1(1,0,l1,r1)*search2(0,1,l2,r2) ;
}
else{
if(ct2[2]==r2-l2+1){
if(ct1[1]&&ct1[2]&&ct1[1]+ct1[2]!=0)ans[i]=search1(0,0,l1,r1)*search2(0,1,l2,r2) ;
else if(ct1[2]==r1-l1+1)ans[i]=search1(0,1,l1,r1)*search2(0,0,l2,r2) ;
else if(!ct1[1]&&!ct1[2])ans[i]=search1(1,0,l1,r1)*search2(0,1,l2,r2) ;
else if(ct1[1]&&ct1[2])ans[i]=0 ;
else if(!ct1[1])ans[i]=search1(0,1,l1,r1)*search2(0,1,l2,r2) ;
else if(!ct1[2])ans[i]=0 ;
}else if(!ct2[1]&&!ct2[2]){
if(ct1[1]+ct1[2]!=r1-l1+1&&ct1[1]&&ct1[2])ans[i]=search1(1,1,l1,r1)*search2(1,0,l2,r2) ;
else if(ct1[1]&&ct1[2])ans[i]=0 ;
else if(!ct1[1]&&!ct1[2])ans[i]=search1(1,1,l1,r1)*search2(1,0,l2,r2) ;
else if(ct1[2]){
if(ct1[2]==r1-l1+1)ans[i]=search1(0,0,l1,r1)*search2(1,1,l2,r2) ;
else if(!ct1[2]&&ct1[1]&&ct1[1]!=r1-l1+1)ans[i]=search1(1,1,l1,r1)*search2(1,0,l2,r2) ;
else ans[i]=search1(1,1,l1,r1)*search2(1,0,l2,r2) ;
}
}else if(ct2[1]&&ct2[2]==0&&ct2[1]!=r2-l2+1){
if(ct1[2]==r1-l1+1)ans[i]=search1(0,0,l1,r1)*search2(1,1,l2,r2) ;
else ans[i]=0 ;
}else if(ct2[1]&&ct2[2]&&ct2[1]+ct2[2]==r2-l2+1){
if(!ct1[1]&&!ct1[2])ans[i]=search1(1,0,l1,r1)*search2(0,1,l2,r2) ;
else ans[i]=0 ;
}else if(!ct2[1]&&ct2[2]&&ct2[2]!=r2-l2+1){
if(!ct1[1]&&!ct1[2])ans[i]=search1(1,0,l1,r1)*search2(0,1,l2,r2) ;
else if(ct1[2]==r1-l1+1)ans[i]=search1(0,0,l1,r1)*search2(1,1,l2,r2) ;
else if(!ct1[1]&&ct1[2]!=r1-l1+1)ans[i]=max(search1(1,0,l1,r1)*search2(0,0,l2,r2),search1(0,1,l1,r1)*search2(1,1,l2,r2)) ;
else ans[i]=0 ;
}
}
}
for(int i=1;i<=q;i++)cout<<ans[i]<<endl;
return 0;
}