#include <bits/stdc++.h>
using namespace std;
#define ll long long
int n,m,a[100005],b[100005],q,inf=1e9+1;
struct Seg_Tree
{
int max0,min0,max1,min1;
}tr[400005][2];
void push_up(int p,int id)
{
tr[p][id].max0=max(tr[2*p][id].max0,tr[2*p+1][id].max0);
tr[p][id].max1=max(tr[2*p][id].max1,tr[2*p+1][id].max1);
tr[p][id].min0=min(tr[2*p][id].min0,tr[2*p+1][id].min0);
tr[p][id].min1=min(tr[2*p][id].min1,tr[2*p+1][id].min1);
}
void build(int p,int l,int r,int id)
{
if(l==r)
{
int k=id?b[l]:a[l];
if(k>=0)
{
tr[p][id].max0=tr[p][id].min0=k;
tr[p][id].max1=-inf;
tr[p][id].min1=inf;
}
else
{
tr[p][id].max0=-inf;
tr[p][id].min0=inf;
tr[p][id].max1=tr[p][id].min1=k;
}
return ;
}
int mid=(l+r)>>1;
build(2*p,l,mid,id);
build(2*p+1,mid+1,r,id);
push_up(p,id);
}
int query_max(int p,int l,int r,int x,int y,int id,int rk)
{
if(x<=l&&y>=r)
{
if(!rk)
return tr[p][id].max0;
return tr[p][id].max1;
}
int mid=(l+r)>>1,ret=-inf;
if(x<=mid)
ret=max(ret,query_max(2*p,l,mid,x,y,id,rk));
if(y>mid)
ret=max(ret,query_max(2*p+1,mid+1,r,x,y,id,rk));
return ret;
}
int query_min(int p,int l,int r,int x,int y,int id,int rk)
{
if(x<=l&&y>=r)
{
if(!rk)
return tr[p][id].min0;
return tr[p][id].min1;
}
int mid=(l+r)>>1,ret=inf;
if(x<=mid)
ret=min(ret,query_min(2*p,l,mid,x,y,id,rk));
if(y>mid)
ret=min(ret,query_min(2*p+1,mid+1,r,x,y,id,rk));
return ret;
}
int main()
{
scanf("%d%d%d",&n,&m,&q);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(int i=1;i<=m;i++)
{
scanf("%d",&b[i]);
}
build(1,1,n,0);
build(1,1,m,1);
while(q--)
{
int l1,r1,l2,r2;
ll ans1=-1e18,ans2=-1e18;
scanf("%d%d%d%d",&l1,&r1,&l2,&r2);
int x_a=query_max(1,1,n,l1,r1,0,0),y_a=query_min(1,1,n,l1,r1,0,0),p_a=query_max(1,1,n,l1,r1,0,1),s_a=query_min(1,1,n,l1,r1,0,1);
if(x_a!=-inf)
{
int y_b=query_min(1,1,m,l2,r2,1,0),s_b=query_min(1,1,m,l2,r2,1,1);
if(s_b!=inf)
ans1=1ll*y_a*s_b;
else
ans1=max(ans1,1ll*x_a*y_b);
cout << ans1 << " ";
}
if(p_a!=inf)
{
int x_b=query_max(1,1,m,l2,r2,1,0),p_b=query_max(1,1,m,l2,r2,1,1);
if(x_b!=-inf)
ans2=1ll*p_a*x_b;
else
ans2=max(ans2,1ll*s_a*p_b);
}
printf("%lld\n",max(ans1,ans2));
}
}