#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+10;
int n,m,q,a[N],b[N];
int amax[N][20],azmin[N][20],afmax[N][20],amin[N][20],bmax[N][20],bmin[N][20];
void prep(){
for(int j=1;(1<<j)<=n;j++){
for(int i=1;i<=n;i++){
amax[i][j]=max(amax[i][j-1],amax[i+(1<<j-1)][j-1]);
afmax[i][j]=max(afmax[i][j-1],afmax[i+(1<<j-1)][j-1]);
amin[i][j]=min(amin[i][j-1],amin[i+(1<<j-1)][j-1]);
azmin[i][j]=min(azmin[i][j-1],azmin[i+(1<<j-1)][j-1]);
}
}
for(int j=1;(1<<j)<=m;j++){
for(int i=1;i<=m;i++){
bmax[i][j]=max(bmax[i][j-1],bmax[i+(1<<j-1)][j-1]);
bmin[i][j]=min(bmin[i][j-1],bmin[i+(1<<j-1)][j-1]);
}
}
}
int query_amax(int l,int r){
int k=log2(r-l+1);
return max(amax[l][k],amax[r-(1<<k)+1][k]);
}
int query_amin(int l,int r){
int k=log2(r-l+1);
return min(amin[l][k],amin[r-(1<<k)+1][k]);
}
int query_afmax(int l,int r){
int k=log2(r-l+1);
return max(afmax[l][k],afmax[r-(1<<k)+1][k]);
}
int query_azmin(int l,int r){
int k=log2(r-l+1);
return min(azmin[l][k],azmin[r-(1<<k)+1][k]);
}
int query_bmax(int l,int r){
int k=log2(r-l+1);
return max(bmax[l][k],bmax[r-(1<<k)+1][k]);
}
int query_bmin(int l,int r){
int k=log2(r-l+1);
return min(bmin[l][k],bmin[r-(1<<k)+1][k]);
}
signed main(){
cin>>n>>m>>q;
for(int i=1;i<=n;i++){
cin>>a[i];
amax[i][0]=a[i];
amin[i][0]=a[i];
if(a[i]>=0){
azmin[i][0]=a[i];
afmax[i][0]=INT_MIN;
}else{
afmax[i][0]=a[i];
azmin[i][0]=INT_MAX;
}
}
for(int i=1;i<=m;i++){
cin>>b[i];
bmin[i][0]=b[i];
bmax[i][0]=b[i];
}
prep();
for(int i=1;i<=q;i++){
int l1,r1,l2,r2;
long long ans1,ans2;
cin>>l1>>r1>>l2>>r2;
int aamax=query_amax(l1,r1);
int aamin=query_amin(l1,r1);
int aazmin=query_azmin(l1,r1);
int aafmax=query_afmax(l1,r1);
int bbmax=query_bmax(l2,r2);
int bbmin=query_bmin(l2,r2);
if(bbmin>=0) ans1=aamax*bbmin;
else ans1=aazmin*bbmin;
if(bbmax>=0) ans2=aafmax*bbmax;
else ans2=aamin*bbmax;
cout<<max(ans1,ans2)<<"\n";
}
return 0;
}