#include<bits/stdc++.h>
#define int long long
using namespace std;
int XINF=LONG_LONG_MAX;
int NINF=LONG_LONG_MIN;
int n,m,q,a[100005],b[100005];
int amx[100005][25],amn[100005][25],afx[100005][25],azn[100005][25];
int bmx[100005][25],bmn[100005][25];
inline bool gmx(int &a, int b) {
return b > a ? a = b, true : false;
}
signed main() {
cin>>n>>m>>q;
for(int i=1;i<=n;i++) {
cin>>a[i];
amx[i][0]=a[i];
amn[i][0]=a[i];
afx[i][0]=(a[i]<0?a[i]:NINF);
azn[i][0]=(a[i]>=0?a[i]:XINF);
}
for(int i=1;i<=m;i++) {
cin>>b[i];
bmx[i][0]=b[i];
bmn[i][0]=b[i];
}
for(int j=1;j<=23;j++) {
for(int i=1;i+(1<<j)-1<=m;i++) {
bmx[i][j]=max(bmx[i][j-1],bmx[i+1<<(j-1)][j-1]);
bmn[i][j]=min(bmn[i][j-1],bmn[i+1<<(j-1)][j-1]);
}
}
for(int j=1;j<=23;j++) {
for(int i=1;i+(1<<j)-1<=n;i++) {
amx[i][j]=max(amx[i][j-1],amx[i+1<<(j-1)][j-1]);
afx[i][j]=max(afx[i][j-1],afx[i+1<<(j-1)][j-1]);
amn[i][j]=min(amn[i][j-1],amn[i+1<<(j-1)][j-1]);
azn[i][j]=min(azn[i][j-1],azn[i+1<<(j-1)][j-1]);
}
}
while(q--) {
int la,ra,lb,rb;
cin>>la>>ra>>lb>>rb;
int k=log2(ra-la+1);
int kk=log2(rb-lb+1);
int amax=max(amx[la][k],amx[ra-(1<<k)+1][k]);
int amin=min(amn[la][k],amn[ra-(1<<k)+1][k]);
int afmx=max(afx[la][k],afx[ra-(1<<k)+1][k]);
int azmn=min(azn[la][k],azn[ra-(1<<k)+1][k]);
int bmax=max(bmx[lb][kk],bmx[rb-(1<<kk)+1][kk]);
int bmin=min(bmn[lb][kk],bmn[rb-(1<<kk)+1][kk]);
int ans=NINF;
gmx(ans, amax * (amax >= 0 ? bmin : bmax));
gmx(ans, amin * (amin >= 0 ? bmin : bmax));
if (afmx != NINF)
gmx(ans, afmx * (afmx >= 0 ? bmin : bmax));
if (azmn != XINF)
gmx(ans, azmn * (azmn >= 0 ? bmin : bmax));
printf("%lld\n", ans);
}
return 0;
}