#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,q;
int a1[110000],b[110000];
int f[110000][50][10];
void ST_create(int a[],int fla,int n1){
for(int i=1; i<=n1; i++) {
if(fla%4==1){
if(a[i]<0){
f[i][0][fla]=-1e9-1;
}else{
f[i][0][fla] = a[i];
}
}else if(fla%4==2){
if(a[i]<0){
f[i][0][fla]=1e9+1;
}else{
f[i][0][fla] = a[i];
}
}else if(fla%4==3){
if(a[i]>=0){
f[i][0][fla]=-1e9-1;
}else{
f[i][0][fla] = a[i];
}
}else if(fla%4==0){
if(a[i]>=0){
f[i][0][fla]=1e9+1;
}else{
f[i][0][fla] = a[i];
}
}
}
int k=log2(n1);
for(int j=1; (1<<j)<=n1; j++){
for(int i=1; i<=n1-(1<<j)+1; i++){
if(fla%2==1){
f[i][j][fla] = max(f[i][j-1][fla], f[i+(1<<(j-1))][j-1][fla]);
}else{
f[i][j][fla]= min(f[i][j-1][fla], f[i+(1<<(j-1))][j-1][fla]);
}
}
}
}
int ST_query(int l, int r,int fla){
int s=log2(r-l+1);
if(fla%2==1){
return max(f[l][s][fla], f[r-(1<<s)+1][s][fla]);
}else{
return min(f[l][s][fla], f[r-(1<<s)+1][s][fla]);
}
}
signed main() {
cin>>n>>m>>q;
for(int i=1;i<=n;i++){
scanf("%lld",&a1[i]);
}
for(int i=1;i<=m;i++){
scanf("%lld",&b[i]);
}
for(int i=1;i<=8;i++){
if(i<=4){
ST_create(a1,i,n);
}else{
ST_create(b,i,m);
}
}
for(int i=1;i<=q;i++){
int l1,l2,r1,r2;
scanf("%lld%lld%lld%lld",&l1,&r1,&l2,&r2);
int kkk[10];
for(int i=1;i<=8;i++){
if(i<=4){
kkk[i]=ST_query(l1,r1,i);
}else{
kkk[i]=ST_query(l2,r2,i);
}
}
int maxx=-1e18-1;
if(kkk[8]==1e9+1){
if(kkk[1]!=-1e9-1){
maxx=max(maxx,kkk[1]*kkk[6]);
}else{
maxx=max(maxx,kkk[3]*kkk[5]);
}
}else if(kkk[5]==-1e9-1){
if(kkk[4]!=1e9+1){
maxx=max(maxx,kkk[4]*kkk[7]);
}else{
maxx=max(maxx,kkk[2]*kkk[8]);
}
}else{
if(kkk[1]==-1e9-1){
maxx=max(maxx,kkk[3]*kkk[5]);
}else if(kkk[3]==1e9+1){
maxx=max(maxx,kkk[2]*kkk[8]);
}else{
maxx=max(maxx,max(kkk[2]*kkk[8],kkk[3]*kkk[5]));
}
}
printf("%lld\n",maxx);
}
return 0;
}