#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
const int INF=0x3f3f3f3f;
int n,m,q;
int a[N],b[N],ta1[N],ta2[N];
int STa1[N][50],STa2[N][50],mSTa1[N][50],mSTa2[N][50],STb1[N][50],STb2[N][50];
void creat_max_ST(int t[],int ST[][50],int p){
for(int i=1;i<=p;i++){
ST[i][0]=t[i];
}
for(int i=1;i<=log(p);i++){
for(int j=1;j+(1<<i)-1<=p;j++){
ST[j][i]=max(ST[j][i-1],ST[j+(1<<i-1)][i-1]);
}
}
}
void creat_min_ST(int t[],int ST[][50],int p){
for(int i=1;i<=p;i++){
ST[i][0]=t[i];
}
for(int i=1;i<=log(p);i++){
for(int j=1;j+(1<<i)-1<=p;j++){
ST[j][i]=min(ST[j][i-1],ST[j+(1<<i-1)][i-1]);
}
}
}
int query_max(int ST[][50], int l,int r){
if(r-l==0)return ST[l][0];
int tmp=0;
int mi=log(r-l);
while(tmp<=mi)tmp++;
tmp-=1;
return max(ST[l][tmp],ST[r-(1<<tmp)+1][tmp]);
}
int query_min(int ST[][50], int l,int r){
if(r-l==0)return ST[l][0];
int tmp=0;
int mi=log(r-l);
while(tmp<=mi)tmp++;
tmp-=1;
return min(ST[l][tmp],ST[r-(1<<tmp)+1][tmp]);
}
int main(){
cin>>n>>m>>q;
for(int i=1;i<=n;i++){
cin>>a[i];
ta1[i]=a[i];
ta2[i]=a[i];
if(ta1[i]<0){
ta1[i]=INF;
}
if(ta2[i]>0){
ta2[i]=-INF;
}
}
for(int i=1;i<=m;i++){
cin>>b[i];
}
creat_max_ST(a,STa1,n);
creat_min_ST(ta1,STa2,n);
creat_max_ST(ta2,mSTa1,n);
creat_min_ST(a,mSTa2,n);
creat_max_ST(b,STb1,m);
creat_min_ST(b,STb2,m);
for(int i=1;i<=q;i++){
int l1,r1,l2,r2;
cin>>l1>>r1>>l2>>r2;
int ans=0;
int y=query_min(STb2,l2,r2),x;
if(y>=0){
x=query_max(STa1,l1,r1);
}else{
x=query_min(STa2,l1,r1);
}
if(x<0)ans=0;
else ans=x*y;
y=query_max(STb1,l2,r2);
if(y>=0){
x=query_max(mSTa1,l1,r1);
}else{
x=query_min(mSTa2,l1,r1);
}
if(x<0)ans=max(ans,x*y);
cout<<ans<<endl;
}
return 0;
}