link
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
const long long INF = 1e17;
struct ST{
long long lg[maxn],st_min[maxn][19],st_max[maxn][19];
void init(long long a[],int n){
lg[0] = -1;
for(int i = 1;i <= n;i++){
lg[i] = lg[i/2]+1;
st_min[i][0] = st_max[i][0] = a[i];
if(a[i] == INF){
st_max[i][0] = -INF;
// cout<<st_max[i][0]<<endl;
}
}
for(int j = 1;j <= lg[n];j++){
for(int i = 1;i <= n;i++){
st_min[i][j] = min(st_min[i][j-1],st_min[i+(1<<j-1)][j-1]);
st_max[i][j] = max(st_max[i][j-1],st_max[i+(1<<j-1)][j-1]);
}
}
}
long long qmin(int l,int r){
int k = lg[r-l+1];
return min(st_min[l][k],st_min[r-(1<<k)+1][k]);
}
long long qmax(int l,int r){
int k = lg[r-l+1];
return max(st_max[l][k],st_max[r-(1<<k)+1][k]);
}
}A1,A2,B1,B2;
long long a1[maxn],a2[maxn],b1[maxn],b2[maxn],a[maxn],b[maxn];
int main(){
//freopen("game.in","r",stdin);
//freopen("game.out","w",stdout);
int n,m,q;
cin>>n>>m>>q;
for(int i = 1;i <= n;i++){
cin>>a[i];
a1[i] = a2[i] = a[i];
if(a[i] < 0) a1[i] = INF;
if(a[i] > 0)a2[i] = INF;
}
for(int i = 1;i <= m;i++){
cin>>b[i];
b1[i] = b2[i] = b[i];
if(b[i] < 0) b1[i] = INF;
if(b[i] > 0)b2[i] = INF;
}
A1.init(a1,n);
A2.init(a2,n);
B1.init(b1,m);
B2.init(b2,m);
while(q--){
int l1,r1,l2,r2;
cin>>l1>>r1>>l2>>r2;
vector<long long> v1 = {A1.qmin(l1,r1),A2.qmin(l1,r1),A1.qmax(l1,r1),A2.qmax(l1,r1)};
vector<long long> v2 = {B1.qmin(l2,r2),B2.qmin(l2,r2),B1.qmax(l2,r2),B2.qmax(l2,r2)};
long long ret = -INF;
for(long long p1:v1)if(abs(p1) != INF){
long long tmp = INF;
for(long long p2:v2)if(abs(p2) != INF){
//cout<<p1<<" "<<p2<<endl;
tmp = min(tmp,p1 * p2);
}
ret = max(ret,tmp);
}
cout<<ret<<endl;
}
}