#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5,LOGN=19;
int n,m,q;
int a[N],b[N];
int l1,l2,r1,r2;
int maxa[LOGN][N],maxb[LOGN][N],mina[LOGN][N],minb[LOGN][N];
int lg2[N];
int qrymaxa(int l,int r){
int t=lg2[r-l+1];
return max(maxa[t][l],maxa[t][r-(1<<t)+1]);
}
int qrymaxb(int l,int r){
int t=lg2[r-l+1];
return max(maxb[t][l],maxb[t][r-(1<<t)+1]);
}
int qrymina(int l,int r){
int t=lg2[r-l+1];
return min(mina[t][l],mina[t][r-(1<<t)+1]);
}
int qryminb(int l,int r){
int t=lg2[r-l+1];
return min(minb[t][l],minb[t][r-(1<<t)+1]);
}
void init(){
memset(maxa,-63,sizeof maxa);
memset(maxb,-63,sizeof maxb);
memset(mina,63,sizeof mina);
memset(minb,63,sizeof minb);
cin>>n>>m>>q;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=m;i++){
cin>>b[i];
}
for(int i=2;i<=100000;i++){
lg2[i]=lg2[i>>1]+1;
}
for(int i=1;i<=n;i++){
maxa[0][i]=mina[0][i]=a[i];
}
for(int i=1;i<=m;i++){
maxb[0][i]=minb[0][i]=b[i];
}
for(int j=1;j<=lg2[n];j++){
for(int i=1;i<=n;i++){
maxa[j][i]=max(maxa[j-1][i],maxa[j-1][i+(1<<(j-1))]);
}
}
for(int j=1;j<=lg2[m];j++){
for(int i=1;i<=m;i++){
maxb[j][i]=max(maxb[j-1][i],maxb[j-1][i+(1<<(j-1))]);
}
}
for(int j=1;j<=lg2[m];j++){
for(int i=1;i<=m;i++){
minb[j][i]=min(minb[j-1][i],minb[j-1][i+(1<<(j-1))]);
}
}
for(int j=1;j<=lg2[n];j++){
for(int i=1;i<=n;i++){
mina[j][i]=min(mina[j-1][i],mina[j-1][i+(1<<(j-1))]);
}
}
}
int main(){
cin.tie(0)->sync_with_stdio(0);
init();
while(q--){
cin>>l1>>l2>>r1>>r2;
if(qryminb(l2,r2)>=0){
cout<<qrymaxa(l1,r1)*qryminb(l2,r2)<<"\n";
}
else if(qrymaxb(l2,r2)<=0){
cout<<qrymina(l1,r1)*qrymaxb(l2,r2)<<"\n";
}
else{
cout<<max(qrymaxa(l1,r1)*qryminb(l2,r2),qrymina(l1,r1)*qrymaxb(l2,r2))<<"\n";
}
}
return 0;
}