#include<iostream>
#include<cmath>
#define MaxN 100005
using namespace std;
int tr[MaxN*4][4][2],num1,num2;
int n,m,q,b[4][2][MaxN],a[MaxN];
void build(int c,int l,int r,int k1,int k2){
if(l==r){
tr[c][k1][k2]=b[k1][k2][l];
return;
}
int mid=(l+r)/2;
build(c*2,l,mid,k1,k2);
build(c*2+1,mid+1,r,k1,k2);
if(k1%2==0) tr[c][k1][k2]=min(tr[c*2][k1][k2],tr[c*2+1][k1][k2]);
else tr[c][k1][k2]=max(tr[c*2][k1][k2],tr[c*2+1][k1][k2]);
}
int query(int c,int l,int r,int x,int y,int k1,int k2){
if(l==x&&r==y){
return tr[c][k1][k2];
}
int mid=(l+r)/2;
if(x>mid) return query(c*2+1,mid+1,r,x,y,k1,k2);
if(y<=mid) return query(c*2,l,mid,x,y,k1,k2);
if(x<=mid&&y>mid){
if(k1%2==0) return min(query(c*2,l,mid,x,mid,k1,k2) , query(c*2+1,mid+1,r,mid+1,y,k1,k2));
else return max(query(c*2,l,mid,x,mid,k1,k2) , query(c*2+1,mid+1,r,mid+1,y,k1,k2));
}
}
int main()
{
cin>>n>>m>>q;
int num1=0;num2=0;
for(int i=1;i<=n;i++){
int x;
cin>>x;
a[i]=a[i-1];
if(x<0){
b[1][0][++num1]=x;
b[2][0][num1]=x;
}
else{
b[0][0][++num2]=x;
b[3][0][num2]=x;
a[i]++;
}
}
for(int j=1;j<=m;j++){
cin>>b[0][1][j];
b[1][1][j]=b[0][1][j];
}
build(1,1,num1,1,0);
build(1,1,num2,0,0);
build(1,1,num1,2,0);
build(1,1,num2,3,0);
build(1,1,m,0,1);
build(1,1,m,1,1);
while(q--){
int ans;
int l1,r1,l2,r2;
cin>>l1>>r1>>l2>>r2;
int afmax=query(1,1,num1,l1-a[l1-1],r1-a[r1],1,0);
int azmin=query(1,1,num2,a[l1-1]+1,a[r1],0,0);
int afmin=query(1,1,num1,l1-a[l1-1],r1-a[r1],2,0);
int azmax=query(1,1,num2,a[l1-1]+1,a[r1],3,0);
int bmax=query(1,1,m,l2,r2,1,1);
int bmin=query(1,1,m,l2,r2,0,1);
if(bmax<0) cout<<afmin*bmax;
else if(bmin>0) cout<<azmax*bmin;
else cout<<max(afmax*bmax,azmin*bmin);
cout<<"\n";
}
return 0;
}