#include <bits/stdc++.h>
using namespace std;
long long y,ad,bd,ax,bx,n,m,q,a[100010],b[100010],af[100010][50],ag[100010][50],l1,l2,r1,r2,c,w,e,v,mi,ma,gax[100010][50],gad[100010][50],gbd[100010][50],gbx[100010][50];
long long xa(long long l,long long r){
return max(gax[l][c],gax[r-(1<<c)+1][c]);
}
long long xb(long long l,long long r){
return max(gbx[l][v],gbx[r-(1<<v)+1][v]);
}
long long da(long long l,long long r){
return max(gad[l][c],gad[r-(1<<c)+1][c]);
}
long long db(long long l,long long r){
return max(gbd[l][v],gbd[r-(1<<v)+1][v]);
}
long long za(long long a,long long b){
if(a>b){
return a;
}
return b;
}
int main(){
cin>>n>>m>>q;
for(long long i=1;i<=n;i++){
scanf("%lld",&a[i]);
gad[i][0]=a[i];
gax[i][0]=a[i];
if(a[i]>=0){
af[i][0]=a[i];
ag[i][0]=0x8080808080808080;
}
else{
ag[i][0]=a[i];
af[i][0]=0x7f7f7f7f7f7f7f7f;
}
}
for(long long j=1;(1<<j)<=n;j++){
for(long long i=1;i<=n-(1<<j)+1;i++){
gad[i][j]=max(gad[i][j-1],gad[i+(1<<(j-1))][j-1]);
gax[i][j]=min(gax[i][j-1],gax[i+(1<<(j-1))][j-1]);
af[i][j]=min(af[i][j-1],af[i+(1<<(j-1))][j-1]);
ag[i][j]=max(ag[i][j-1],ag[i+(1<<(j-1))][j-1]);
}
}
for(long long i=1;i<=m;i++){
scanf("%lld",&b[i]);
gbd[i][0]=b[i];
gbx[i][0]=b[i];
}
for(long long j=1;(1<<j)<=m;j++){
for(long long i=1;i<=m-(1<<j)+1;i++){
gbd[i][j]=max(gbd[i][j-1],gbd[i+(1<<(j-1))][j-1]);
gbx[i][j]=min(gbx[i][j-1],gbx[i+(1<<(j-1))][j-1]);
}
}
for(long long i=1;i<=q;i++){
scanf("%lld%lld%lld%lld",&l1,&r1,&l2,&r2);
c=log2(r1-l1+1);
v=log2(r2-l2+1);
ax=xa(l1,r1);
bx=xb(l2,r2);
ad=da(l1,r1);
bd=db(l2,r2);
if(ax>=0&&bx>=0){
printf("%lld\n",ad*bx);
}
else if(ax>=0&&bd<0){
printf("%lld\n",ax*bx);
}
else if(ax>=0){
printf("%lld\n",ax*bx);
}
else if(ad<0&&bx>=0){
printf("%lld\n",ad*bd);
}
else if(ad<0&&bd<0){
printf("%lld\n",ax*bd);
}
else if(ad<0){
printf("%lld\n",ad*bd);
}
else if(bx>=0){
printf("%lld\n",ad*bx);
}
else if(bd<0){
printf("%lld\n",ax*bd);
}
else{
w=min(af[l1][c],af[r1-(1<<c)+1][c])*bx;
e=max(ag[l1][c],ag[r1-(1<<c)+1][c])*bd;
y=za(w,e);
printf("%lld\n",y);
}
}
return 0;
}
全wa,在线等急