#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll N=100010,inf=2e9;
ll n,m,q,a,b,lg[N],f[N][64][4],g[N][64][2],fgup[N],fgdown[N];
/*
f[i][k][0] 表示i位[i,i+2^k) 0上最大值
f[i][k][1] 表示i位[i,i+2^k) 0上最小值
f[i][k][2] 表示i位[i,i+2^k) 0下最大值
f[i][k][3] 表示i位[i,i+2^k) 0下最小值
g[i][k][0] 表示i位[i,i+2^k) 最大值
g[i][k][1] 表示i位[i,i+2^k) 最小值
fgup[i] 表示[1,i]中>=0的数的个数
fgdown[i] 表示[1,i]中<=0的数的个数
lg[i] 表示log i (2为底,向下取整)
*/
int main()
{
/*freopen("game.in","r",stdin);
freopen("game.out","w",stdout);*/
scanf("%lld%lld%lld",&n,&m,&q);
for(int i=2 ; i <= n ; ++i) lg[i]=lg[i-1]+(i == (1ll<<(lg[i-1]+1)));
for(int i=1 ; i <= n ; ++i)
{
scanf("%lld",&a);
if(a >= 0) f[i][0][0]=f[i][0][1]=a,f[i][0][2]=-inf,f[i][0][3]=0,++fgup[i];
if(a <= 0) f[i][0][2]=f[i][0][3]=a,f[i][0][0]=0,f[i][0][1]=inf,++fgdown[i];
fgup[i]+=fgup[i-1],fgdown[i]+=fgdown[i-1];
}
for(int i=1 ; i <= m ; ++i)
{
scanf("%lld",&b);
g[i][0][0]=g[i][0][1]=b;
}
for(int k=1 ; k <= lg[n] ; ++k)
{
for(int i=1 ; i+(1ll<<(k-1)) <= n ; ++i)
{
f[i][k][0]=max(f[i][k-1][0],f[i+(1ll<<(k-1))][k-1][0]);
f[i][k][1]=min(f[i][k-1][1],f[i+(1ll<<(k-1))][k-1][1]);
f[i][k][2]=max(f[i][k-1][2],f[i+(1ll<<(k-1))][k-1][2]);
f[i][k][3]=min(f[i][k-1][3],f[i+(1ll<<(k-1))][k-1][3]);
}
}
for(int k=1 ; k <= lg[m] ; ++k)
{
for(int i=1 ; i+(1ll<<(k-1)) <= m ; ++i)
{
g[i][k][0]=max(g[i][k-1][0],g[i+(1ll<<(k-1))][k-1][0]);
g[i][k][1]=min(g[i][k-1][1],g[i+(1ll<<(k-1))][k-1][1]);
}
}
for(int i=1 ; i <= q ; ++i)
{
ll l,r,L,R,s1,s2;
ll ans=-inf*inf,maxup,maxdown,max2,minup,mindown,min2;
scanf("%lld%lld%lld%lld",&l,&r,&L,&R);
s1=lg[r-l+1],s2=lg[R-L+1];
maxup=max(f[l][s1][0],f[r-(1ll<<s1)+1][s1][0]);
minup=min(f[l][s1][1],f[r-(1ll<<s1)+1][s1][1]);
maxdown=max(f[l][s1][2],f[r-(1ll<<s1)+1][s1][2]);
mindown=min(f[l][s1][3],f[r-(1ll<<s1)+1][s1][3]);
max2=max(g[L][s2][0],g[R-(1ll<<s2)+1][s2][0]);
min2=min(g[L][s2][1],g[R-(1ll<<s2)+1][s2][1]);
if(fgup[r]-fgup[l-1]) ans=max(ans,maxup*min2);
if(fgup[r]-fgup[l-1]) ans=max(ans,minup*min2);
if(fgdown[r]-fgdown[l-1]) ans=max(ans,maxdown*max2);
if(fgdown[r]-fgdown[l-1]) ans=max(ans,mindown*max2);
printf("%lld\n",ans);
}
return 0;
}