#include<cstdio>
#include<cstring>
#define INF 0x3f3f3f3f
using namespace std;
long long min(long long t1,long long t2)
{
if(t1<t2) return t1;
else return t2;
}
long long max(long long t1,long long t2)
{
if(t1>t2) return t1;
else return t2;
}
long long a[100001],b[100001],n,m,q,log[100001];
struct ST_Table
{
long long num[100001][20],i;
inline long long cmp(long long t)
{
if(i==2&&t<0) return INF;
else if(i==3&&t>=0) return -INF;
else return t;
}
void build1(char t)
{
if(t=='a')
{
for(long long i=1;i<=n;i++)
num[i][0]=cmp(a[i]);
for(long long i=1;i<=log[n];i++)
for(long long j=1;j+(1<<i)-1<=n;j++)
num[j][i]=max(num[j][i-1],num[j+(1<<(i-1))][i-1]);
}
else
{
for(long long i=1;i<=m;i++)
num[i][0]=cmp(b[i]);
for(long long i=1;i<=log[m];i++)
for(long long j=1;j+(1<<i)-1<=m;j++)
num[j][i]=max(num[j][i-1],num[j+(1<<(i-1))][i-1]);
}
}
long long get1(long long l,long long r)
{
long long t=log[r-l+1];
return max(num[l][t],num[r-(1<<t)+1][t]);
}
void build2(char t)
{
if(t=='a')
{
for(long long i=1;i<=n;i++)
num[i][0]=cmp(a[i]);
for(long long i=1;i<=log[n];i++)
for(long long j=1;j+(1<<i)-1<=n;j++)
num[j][i]=min(num[j][i-1],num[j+(1<<(i-1))][i-1]);
}
else
{
for(long long i=1;i<=m;i++)
num[i][0]=cmp(b[i]);
for(long long i=1;i<=log[m];i++)
for(long long j=1;j+(1<<i)-1<=m;j++)
num[j][i]=min(num[j][i-1],num[j+(1<<(i-1))][i-1]);
}
}
long long get2(long long l,long long r)
{
long long t=log[r-l+1];
return min(num[l][t],num[r-(1<<t)+1][t]);
}
};
ST_Table st1,st2,st3,st4,st5,st6;
int main()
{
freopen("game.in","r",stdin);
freopen("game.out","w",stdout);
st1.i=1;
st2.i=2;
st3.i=3;
st4.i=4;
st5.i=5;
st6.i=6;
scanf("%lld%lld%lld",&n,&m,&q);
for(long long i=2;i<=n;i++)
log[i]=log[i/2]+1;
for(long long i=1;i<=n;i++)
scanf("%lld",&a[i]);
for(long long i=1;i<=m;i++)
scanf("%lld",&b[i]);
st1.build1('a');
st2.build2('a');
st3.build1('a');
st4.build2('a');
st5.build2('b');
st6.build1('b');
for(long long i=1;i<=q;i++)
{
long long l1,r1,l2,r2;
scanf("%lld%lld%lld%lld",&l1,&r1,&l2,&r2);
long long ans=-9223372036854775807;
ans=max(ans,st1.get1(l1,r1)*st5.get2(l2,r2));
ans=max(ans,st2.get2(l1,r1)*st5.get2(l2,r2));
ans=max(ans,st3.get1(l1,r1)*st6.get1(l2,r2));
ans=max(ans,st4.get2(l1,r1)*st6.get1(l2,r2));
printf("%lld\n",ans);
}
}