#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e5+10;
const int M = sqrt(1e6+10);
int q,n,m,l1,l2,r1,r2,len1,len2,num1,num2,belong[N][2],a[N][2];
struct node{
int l,r,minz,maxz,minf,maxf,havef,havez,havezero;
}b[M][2];
void build(){
len1=sqrt(n);len2=sqrt(m);
num1=sqrt(n);num2=sqrt(m);
for(int i=1;i<=num1;i++) b[i][0].l=(i-1)*len1+1,b[i][0].r=i*len1;
for(int i=1;i<=num2;i++) b[i][1].l=(i-1)*len2+1,b[i][1].r=i*len2;
if(len1*num1<n){
num1++;
b[num1][0].l=b[num1-1][0].r+1;
b[num1][0].r=n;
}
if(len2*num2<m){
num2++;
b[num2][1].l=b[num2-1][1].r+1;
b[num2][1].r=m;
}
for(int i=1;i<=num1;i++){
b[i][0].maxf=-0x3fffffffffffffff;
b[i][0].minz=0x3fffffffffffffff;
for(int j=b[i][0].l;j<=b[i][0].r;j++){
if(a[j][0]<0){
b[i][0].minf=min(b[i][0].minf,a[j][0]);
b[i][0].maxf=max(b[i][0].maxf,a[j][0]);
b[i][0].havef=1;
}
if(a[j][0]>0){
b[i][0].minz=min(b[i][0].minz,a[j][0]);
b[i][0].maxz=max(b[i][0].maxz,a[j][0]);
b[i][0].havez=1;
}
if(a[j][0]==0){
b[i][0].havezero=1;
}
belong[j][0]=i;
}
}
for(int i=1;i<=num2;i++){
b[i][1].maxf=-0x3fffffffffffffff;
b[i][1].minz=0x3fffffffffffffff;
for(int j=b[i][1].l;j<=b[i][1].r;j++){
if(a[j][1]<0){
b[i][1].minf=min(b[i][1].minf,a[j][1]);
b[i][1].maxf=max(b[i][1].maxf,a[j][1]);
b[i][1].havef=1;
}
if(a[j][1]>0){
b[i][1].minz=min(b[i][1].minz,a[j][1]);
b[i][1].maxz=max(b[i][1].maxz,a[j][1]);
b[i][1].havez=1;
}
if(a[j][1]==0){
b[i][1].havezero=1;
}
belong[j][1]=i;
}
}
}
int gethavezero(int x,int y,int id){
int p=belong[x][id],q=belong[y][id];
for(int i=p+1;i<q;i++){
if(b[i][id].havezero) return 1;
}
for(int i=x;i<=b[p][id].r;i++){
if(a[i][id]==0) return 1;
}
for(int i=b[q][id].l;i<=y;i++){
if(a[i][id]==0) return 1;
}
return 0;
}
int gethavef(int x,int y,int id){
int p=belong[x][id],q=belong[y][id];
for(int i=p+1;i<q;i++){
if(b[i][id].havef) return 1;
}
for(int i=x;i<=b[p][id].r;i++){
if(a[i][id]<0) return 1;
}
for(int i=b[q][id].l;i<=y;i++){
if(a[i][id]<0) return 1;
}
return 0;
}
int gethavez(int x,int y,int id){
int p=belong[x][id],q=belong[y][id];
for(int i=p+1;i<q;i++){
if(b[i][id].havez) return 1;
}
for(int i=x;i<=b[p][id].r;i++){
if(a[i][id]>0) return 1;
}
for(int i=b[q][id].l;i<=y;i++){
if(a[i][id]>0) return 1;
}
return 0;
}
int getminf(int x,int y,int id){
int p=belong[x][id],q=belong[y][id],ans=0;
if(p==q){
for(int i=x;i<=y;i++){if(a[i][id]<0) ans=min(ans,a[i][id]);}
return ans;
}else{
for(int i=x;i<=b[p][id].r;i++){if(a[i][id]<0) ans=min(ans,a[i][id]);}
for(int i=p+1;i<q;i++){
if(b[i][id].minf) ans=min(ans,b[i][id].minf);
}
for(int i=b[q][id].l;i<=y;i++){if(a[i][id]<0) ans=min(ans,a[i][id]);}
return ans;
}
}
int getmaxf(int x,int y,int id){
int p=belong[x][id],q=belong[y][id],ans=-0x3fffffffffffffff;
if(p==q){
for(int i=x;i<=y;i++){if(a[i][id]<0) ans=max(ans,a[i][id]);}
return ans;
}else{
for(int i=x;i<=b[p][id].r;i++){if(a[i][id]<0) ans=max(ans,a[i][id]);}
for(int i=p+1;i<q;i++){
if(b[i][id].maxf) ans=max(ans,b[i][id].maxf);
}
for(int i=b[q][id].l;i<=y;i++){if(a[i][id]<0) ans=max(ans,a[i][id]);}
return ans;
}
}
int getminz(int x,int y,int id){
int p=belong[x][id],q=belong[y][id],ans=0x3fffffffffffffff;
if(p==q){
for(int i=x;i<=y;i++){if(a[i][id]>0) ans=min(ans,a[i][id]);}
return ans;
}else{
for(int i=x;i<=b[p][id].r;i++){if(a[i][id]>0) ans=min(ans,a[i][id]);}
for(int i=p+1;i<q;i++){
if(b[i][id].minz) ans=min(ans,b[i][id].minz);
}
for(int i=b[q][id].l;i<=y;i++){if(a[i][id]>0) ans=min(ans,a[i][id]);}
return ans;
}
}
int getmaxz(int x,int y,int id){
int p=belong[x][id],q=belong[y][id],ans=0;
if(p==q){
for(int i=x;i<=y;i++){if(a[i][id]>0) ans=max(ans,a[i][id]);}
return ans;
}else{
for(int i=x;i<=b[p][id].r;i++){if(a[i][id]>0) ans=max(ans,a[i][id]);}
for(int i=p+1;i<q;i++){
if(b[i][id].maxz) ans=max(ans,b[i][id].maxz);
}
for(int i=b[q][id].l;i<=y;i++){if(a[i][id]>0) ans=max(ans,a[i][id]);}
return ans;
}
}
signed main(){
cin>>n>>m>>q;
for(int i=1;i<=n;i++) cin>>a[i][0];
for(int i=1;i<=m;i++) cin>>a[i][1];
build();
while(q--){
cin>>l1>>r1>>l2>>r2;
if(gethavez(l1,r1,0)&&gethavef(l1,r1,0)&&gethavez(l2,r2,1)&&gethavef(l2,r2,1)){
if(gethavezero(l1,r1,0)){
cout<<0<<endl;
}else{
cout<<max(getmaxf(l1,r1,0)*getmaxz(l2,r2,1),getminz(l1,r1,0)*getminf(l2,r2,1))<<endl;
}
}else{
if(gethavez(l1,r1,0)&&(!gethavef(l1,r1,0))&&gethavez(l2,r2,1)&&gethavef(l2,r2,1)){
if(gethavezero(l1,r1,0)){
cout<<0<<endl;
}else{
cout<<getminz(l1,r1,0)*getminf(l2,r2,1)<<endl;
}
}else{
if((!gethavez(l1,r1,0))&&gethavef(l1,r1,0)&&gethavez(l2,r2,1)&&gethavef(l2,r2,1)){
if(gethavezero(l1,r1,0)){
cout<<0<<endl;
}else{
cout<<getmaxf(l1,r1,0)*getmaxz(l2,r2,1)<<endl;
}
}else{
if(gethavez(l1,r1,0)&&gethavef(l1,r1,0)&&(!gethavez(l2,r2,1))&&gethavef(l2,r2,1)){
if(gethavezero(l2,r2,1)){
cout<<0<<endl;
}else{
cout<<getminf(l1,r1,0)*getmaxf(l2,r2,1)<<endl;
}
}else{
if(gethavez(l1,r1,0)&&gethavef(l1,r1,0)&&gethavez(l2,r2,1)&&(!gethavef(l2,r2,1))){
if(gethavezero(l2,r2,1)) {
cout<<0<<endl;
}else{
cout<<getmaxz(l1,r1,0)*getminz(l2,r2,1)<<endl;
}
}else{
if(gethavez(l1,r1,0)&&(!gethavef(l1,r1,0))&&gethavez(l2,r2,1)&&(!gethavef(l2,r2,1))){
if(gethavezero(l2,r2,1)){
cout<<0<<endl;
}else{
cout<<getmaxz(l1,r1,0)*getminz(l2,r2,1)<<endl;
}
}else{
if(gethavez(l1,r1,0)&&(!gethavef(l1,r1,0))&&(!gethavez(l2,r2,1))&&gethavef(l2,r2,1)){
if(gethavezero(l1,r1,0)){
cout<<0<<endl;
}else{
cout<<getminz(l1,r1,0)*getminf(l2,r2,1)<<endl;
}
}else{
if((!gethavez(l1,r1,0))&&gethavef(l1,r1,0)&&(!gethavez(l2,r2,1))&&gethavef(l2,r2,1)){
if(gethavezero(l2,r2,1)){
cout<<0<<endl;
}else{
cout<<getminf(l1,r1,0)*getmaxf(l2,r2,1)<<endl;
}
}else{
if((!gethavez(l1,r1,0))&&gethavef(l1,r1,0)&&gethavez(l2,r2,1)&&(!gethavef(l2,r2,1))){
if(gethavezero(l1,r1,0)){
cout<<0<<endl;
}else{
cout<<getmaxf(l1,r1,0)*getminz(l2,r2,1)<<endl;
}
}else{
cout<<0<<endl;
}
}
}
}
}
}
}
}
}
}
return 0;
}