#include <bits/stdc++.h>
using namespace std;
#define int long long
#define lson 2*i
#define rson 2*i+1
const int maxn=1e5+10;
struct node
{
struct st
{
int l,r;
int nabs,pabs;
int minn,mx;
}t[4*maxn];
void pushup(int i)
{
t[i].minn=min(t[lson].minn,t[rson].minn);
t[i].mx=max(t[lson].mx,t[rson].mx);
t[i].nabs=min(t[lson].nabs,t[rson].nabs);
t[i].pabs=min(t[lson].pabs,t[rson].pabs);
}
void build(int i,int l,int r,int *a)
{
t[i].l=l,t[i].r=r,t[i].nabs=t[i].pabs=t[i].minn=t[i].mx=0;
if(l==r)
{
t[i].mx=t[i].minn=a[l];
if(a[l]<0)
t[i].nabs=-a[l],t[i].pabs=2e9;
else
t[i].pabs=a[l],t[i].nabs=2e9;
return ;
}
int mid=(l+r)/2;
build(lson,l,mid,a);
build(rson,mid+1,r,a);
pushup(i);
}
int query_min(int i,int l,int r)
{
if(l<=t[i].l&&t[i].r<=r)
{
return t[i].minn;
}
int e=2e9;
if(l<=t[lson].r)
{
e=min(e,query_min(lson,l,r));
}
if(t[rson].l<=r)
e=min(e,query_min(rson,l,r));
return e;
}
int query_max(int i,int l,int r)
{
if(l<=t[i].l&&t[i].r<=r)
{
return t[i].mx;
}
int e=-2e9;
if(l<=t[lson].r)
{
e=max(e,query_max(lson,l,r));
}
if(t[rson].l<=r)
e=max(e,query_max(rson,l,r));
return e;
}
int query_nabs(int i,int l,int r)
{
if(l<=t[i].l&&t[i].r<=r)
{
return t[i].nabs;
}
int e=2e9;
if(l<=t[lson].r)
{
e=min(e,query_nabs(lson,l,r));
}
if(t[rson].l<=r)
e=min(e,query_nabs(rson,l,r));
return e;
}
int query_pabs(int i,int l,int r)
{
if(l<=t[i].l&&t[i].r<=r)
{
return t[i].pabs;
}
int e=2e9;
if(l<=t[lson].r)
{
e=min(e,query_pabs(lson,l,r));
}
if(t[rson].l<=r)
e=min(e,query_pabs(rson,l,r));
return e;
}
}t1,t2;
int n,m,q;
int a[maxn],b[maxn];
signed main()
{
ios::sync_with_stdio(false);
cin>>n>>m>>q;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=m;i++)
cin>>b[i];
t1.build(1,1,n,a);
t2.build(1,1,m,b);
int l1,r1,l2,r2;
while(q--)
{
cin>>l1>>r1>>l2>>r2;
int mx1=t1.query_max(1,l1,r1),minn1=t1.query_min(1,l1,r1),mx2=t2.query_max(1,l2,r2),minn2=t2.query_min(1,l2,r2);
int pabs1=t1.query_pabs(1,l1,r1),nabs1=t1.query_nabs(1,l1,r1);
int pabs2=t2.query_pabs(1,l2,r2),nabs2=t2.query_nabs(1,l2,r2);
if(minn2>=0)
{
if(mx1>=0)
cout<<mx1*minn2<<endl;
else
{
cout<<-mx2*nabs1<<endl;
}
}
else if(mx2<0)
{
if(minn1>=0)
{
cout<<minn2*pabs1<<endl;
}
else
cout<<minn1*mx2<<endl;
}
else
{
cout<<max(-nabs1*mx2,pabs1*minn2)<<endl;
}
}
return 0;
}