#include<bits/stdc++.h>
#define inf INT_MAX
using namespace std;
const int N=5e5+10;
int n,m,q,a[N],b[N];
struct ta{
int afmax=INT_MIN,azmin=INT_MAX,amax,amin;
}aa[N];
struct tb{
int bmax,bmin;
}bb[N];
int query_bmax(int p,int x,int y,int l,int r){
int ans=-inf;
if(l<=x&&y<=r) return bb[p].bmax;
int mid=x+y>>1;
if(l<=mid) ans=max(ans,query_bmax(p<<1,x,mid,l,r));
if(r>mid) ans=max(ans,query_bmax(p<<1|1,mid+1,y,l,r));
return ans;
}
int query_bmin(int p,int x,int y,int l,int r){
int ans=inf;
if(l<=x&&y<=r) return bb[p].bmin;
int mid=x+y>>1;
if(l<=mid) ans=min(ans,query_bmin(p<<1,x,mid,l,r));
if(r>mid) ans=min(ans,query_bmin(p<<1|1,mid+1,y,l,r));
return ans;
}
int query_amax(int p,int x,int y,int l,int r){
int ans=-inf;
if(l<=x&&y<=r) return aa[p].amax;
int mid=x+y>>1;
if(l<=mid) ans=max(ans,query_amax(p<<1,x,mid,l,r));
if(r>mid) ans=max(ans,query_amax(p<<1|1,mid+1,y,l,r));
return ans;
}
int query_amin(int p,int x,int y,int l,int r){
int ans=inf;
if(l<=x&&y<=r) return aa[p].amin;
int mid=x+y>>1;
if(l<=mid) ans=min(ans,query_amin(p<<1,x,mid,l,r));
if(r>mid) ans=min(ans,query_amin(p<<1|1,mid+1,y,l,r));
return ans;
}
int query_afmax(int p,int x,int y,int l,int r){
int ans=-inf;
if(l<=x&&y<=r) return aa[p].afmax;
int mid=x+y>>1;
if(l<=mid) ans=max(ans,query_afmax(p<<1,x,mid,l,r));
if(r>mid) ans=max(ans,query_afmax(p<<1|1,mid+1,y,l,r));
return ans;
}
int query_azmin(int p,int x,int y,int l,int r){
int ans=inf;
if(l<=x&&y<=r) return aa[p].azmin;
int mid=x+y>>1;
if(l<=mid) ans=min(ans,query_azmin(p<<1,x,mid,l,r));
if(r>mid) ans=min(ans,query_azmin(p<<1|1,mid+1,y,l,r));
return ans;
}
long long calc(int l1,int r1,int l2,int r2){
long long ans=-inf;
long long bbmax=query_bmax(1,1,m,l2,r2),bbmin=query_bmin(1,1,m,l2,r2);
long long aafmax=query_afmax(1,1,n,l1,r1),aazmin=query_azmin(1,1,n,l1,r1);
long long aamax=query_amax(1,1,n,l1,r1),aamin=query_amin(1,1,n,l1,r1);
if(aamax>=0){ans=max(ans,aamax*bbmin);}
else{ans=max(ans,aamax*bbmax);}
if(aazmin>=0){ans=max(ans,aazmin*bbmin);}
if(aamin<0){ans=max(ans,aamin*bbmax);}
else{ans=max(ans,aamin*bbmin);}
if(aafmax<0){ans=max(ans,aafmax*bbmax);}
return ans;
}
void builda(int p,int l,int r){
if(l==r){
if(a[l]<0){aa[p].afmax=aa[p].amax=aa[p].amin=a[l];}
else{aa[p].azmin=aa[p].amax=aa[p].amin=a[l];}
return;
}
int mid=l+r>>1;
builda(p<<1,l,mid);builda(p<<1|1,mid+1,r);
aa[p].amax=max(aa[p<<1].amax,aa[p<<1|1].amax);
aa[p].amin=min(aa[p<<1].amin,aa[p<<1|1].amin);
aa[p].afmax=max(aa[p<<1].afmax,aa[p<<1|1].afmax);
aa[p].azmin=min(aa[p<<1].azmin,aa[p<<1|1].azmin);
}
void buildb(int p,int l,int r){
if(l==r){
bb[p].bmax=bb[p].bmin=b[l];
return;
}
int mid=l+r>>1;
buildb(p<<1,l,mid);buildb(p<<1|1,mid+1,r);
bb[p].bmax=max(bb[p<<1].bmax,bb[p<<1|1].bmax);
bb[p].bmin=min(bb[p<<1].bmin,bb[p<<1|1].bmin);
}
signed main(){
cin>>n>>m>>q;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=m;i++){
cin>>b[i];
}
builda(1,1,n);
buildb(1,1,m);
for(int i=1;i<=q;i++){
int l1,r1,l2,r2;
cin>>l1>>r1>>l2>>r2;
cout<<calc(l1,r1,l2,r2)<<'\n';
}
return 0;
}