#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll N=1e5+5,inf=0x3f3f3f3f3f3f3f3f;
ll n,m,q,k,a,b,_inf;
ll sta0_min[N][20],sta0_max[N][20],sta1_min[N][20],sta1_max[N][20];
ll stb0_min[N][20],stb0_max[N][20],stb1_min[N][20],stb1_max[N][20];
bool sta[N][20],stb[N][20];
ll loog[N];
void init(){
loog[0]=-1;for(ll i=1;i<=n;i++)loog[i]=loog[i>>1]+1;
memset(sta0_min,0x3f,sizeof(sta0_min));memset(sta1_min,0x3f,sizeof(sta1_min));
memset(sta0_max,-0x3f,sizeof(sta0_max));memset(sta1_max,-0x3f,sizeof(sta1_max));
memset(stb0_min,0x3f,sizeof(stb0_min));memset(stb1_min,0x3f,sizeof(stb1_min));
memset(stb0_max,-0x3f,sizeof(stb0_max));memset(stb1_max,-0x3f,sizeof(stb1_max));
}
void dp(){
k=loog[n];
for(ll j=1;j<=k;j++){
ll i=1;
for(;i<=n-(1<<j)+1;i++){
sta0_min[i][j]=min(sta0_min[i][j-1],sta0_min[i+(1<<j-1)][j-1]);
sta1_min[i][j]=min(sta1_min[i][j-1],sta1_min[i+(1<<j-1)][j-1]);
sta0_max[i][j]=max(sta0_max[i][j-1],sta0_max[i+(1<<j-1)][j-1]);
sta1_max[i][j]=max(sta1_max[i][j-1],sta1_max[i+(1<<j-1)][j-1]);
sta[i][j]=sta[i][j-1]|sta[i+(1<<j-1)][j-1];
}
for(;i<=n;i++){
sta0_min[i][j]=sta0_min[i][j-1];
sta1_min[i][j]=sta1_min[i][j-1];
sta0_max[i][j]=sta0_max[i][j-1];
sta1_max[i][j]=sta1_max[i][j-1];
sta[i][j]=sta[i][j-1];
}
}
k=loog[m];
for(ll j=1;j<=k;j++){
ll i=1;
for(;i<=m-(1<<j)+1;i++){
stb0_min[i][j]=min(stb0_min[i][j-1],stb0_min[i+(1<<j-1)][j-1]);
stb1_min[i][j]=min(stb1_min[i][j-1],stb1_min[i+(1<<j-1)][j-1]);
stb0_max[i][j]=max(stb0_max[i][j-1],stb0_max[i+(1<<j-1)][j-1]);
stb1_max[i][j]=max(stb1_max[i][j-1],stb1_max[i+(1<<j-1)][j-1]);
stb[i][j]=stb[i][j-1]|stb[i+(1<<j-1)][j-1];
}
for(;i<=n;i++){
stb0_min[i][j]=stb0_min[i][j-1];
stb1_min[i][j]=stb1_min[i][j-1];
stb0_max[i][j]=stb0_max[i][j-1];
stb1_max[i][j]=stb1_max[i][j-1];
stb[i][j]=stb[i][j-1];
}
}
}
ll get_ans(const ll& l,const ll& r,const bool& x ,const bool& y ,const bool& z ){
k=loog[r-l+1];
if(x){
if(y){
if(z){
return min(sta0_min[l][k],sta0_min[r-(1<<k)+1][k]);
}else{
return min(sta1_min[l][k],sta1_min[r-(1<<k)+1][k]);
}
}else{
if(z){
return max(sta0_max[l][k],sta0_max[r-(1<<k)+1][k]);
}else{
return max(sta1_max[l][k],sta1_max[r-(1<<k)+1][k]);
}
}
}else{
if(y){
if(z){
return min(stb0_min[l][k],stb0_min[r-(1<<k)+1][k]);
}else{
return min(stb1_min[l][k],stb1_min[r-(1<<k)+1][k]);
}
}else{
if(z){
return max(stb0_max[l][k],stb0_max[r-(1<<k)+1][k]);
}else{
return max(stb1_max[l][k],stb1_max[r-(1<<k)+1][k]);
}
}
}
}
bool get(const ll& l,const ll& r,const bool& x ){
k=loog[r-l+1];
if(x){
return sta[l][k]|sta[r-(1<<k)+1][k];
}else{
return stb[l][k]|stb[r-(1<<k)+1][k];
}
}
int main(){
freopen("P8818_4.in","r",stdin);
freopen("hhh","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>n>>m>>q;init();
_inf=sta0_max[0][0];
for(ll i=1;i<=n;i++){
cin>>a;
if(a==0){
sta[i][0]=1;
}else if(a<0){
sta0_min[i][0]=sta0_max[i][0]=a;
}else if(a>0){
sta1_min[i][0]=sta1_max[i][0]=a;
}
}
for(ll i=1;i<=m;i++){
cin>>b;
if(b==0){
stb[i][0]=1;
}else if(b<0){
stb0_min[i][0]=stb0_max[i][0]=b;
}else if(b>0){
stb1_min[i][0]=stb1_max[i][0]=b;
}
}
dp();
ll l1,r1,l2,r2;
ll ans_sta0_min,ans_sta0_max,ans_sta1_min,ans_sta1_max;
ll ans_stb0_min,ans_stb0_max,ans_stb1_min,ans_stb1_max;
bool ans_sta,ans_stb;
bool a0,a1,b0,b1;
ll ans;
for(ll i=1;i<=q;i++){
cin>>l1>>r1>>l2>>r2;
ans_sta0_min=get_ans(l1,r1,1,1,1);ans_sta0_max=get_ans(l1,r1,1,0,1);
ans_sta1_min=get_ans(l1,r1,1,1,0);ans_sta1_max=get_ans(l1,r1,1,0,0);
ans_stb0_min=get_ans(l2,r2,0,1,1);ans_stb0_max=get_ans(l2,r2,0,0,1);
ans_stb1_min=get_ans(l2,r2,0,1,0);ans_stb1_max=get_ans(l2,r2,0,0,0);
ans_sta=get(l1,r1,1); ans_stb=get(l2,r2,0);
a0=(ans_sta0_min!=inf||ans_sta0_max!=_inf);
a1=(ans_sta1_min!=inf||ans_sta1_max!=_inf);
b0=(ans_stb0_min!=inf||ans_stb0_max!=_inf);
b1=(ans_stb1_min!=inf||ans_stb1_max!=_inf);
if((!a0 && ans_sta && !a1) || (!b0 && ans_stb && !b1)){
ans=0;
} else if(b0 && !b1){
if(a0){
ans=ans_sta0_min*ans_stb0_max;
if(ans_stb)ans=0;
} else {
if(ans_sta){
ans=0;
} else {
ans=ans_sta1_min*ans_stb0_min;
}
}
} else if(!b0 && b1){
if(a1){
ans=ans_sta1_max*ans_stb1_min;
if(ans_stb)ans=0;
} else {
if(ans_sta){
ans=0;
} else {
ans=ans_sta0_max*ans_stb1_max;
}
}
} else {
if(a0 && a1){
ans=max(ans_sta1_min*ans_stb0_min,ans_sta0_max*ans_stb1_max);
} else {
if(a1){
ans=ans_sta1_min*ans_stb0_min;
} else {
ans=ans_sta0_max*ans_stb1_max;
}
}
if(ans_sta){
ans=max(ans,0ll);
}
}
cout<<ans<<'\n';
}
}