#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read() {
int x=0,f=1;
char ch=getchar();
while (ch<'0'||ch>'9') {
if (ch=='-') f=-1;
ch=getchar();
}
while (ch>='0'&&ch<='9') {
x=x*10+ch-48;
ch=getchar();
}
return x*f;
}
struct ST_MIN{
int st[18][100001]={{0}},p2[100001]={0};
void init(int n,int a[]) {
p2[0]=1;
for(int i=1; i<=n; i++)st[0][i]=a[i],p2[i]=p2[i-1]*2;
for(int i=1; i<=17; i++) {
for(int j=1; j+p2[i]-1<=n; j++) {
st[i][j]=min(st[i-1][j],st[i-1][j+p2[i-1]]);
}
}
}
int query(int l,int r) {
int ll=log2(r-l+1);
return min(st[ll][l],st[ll][r-p2[ll]+1]);
}
};
struct ST_MAX{
int st[18][100001]={{0}},p2[100001]={0};
void init(int n,int a[]) {
p2[0]=1;
for(int i=1; i<=n; i++)st[0][i]=a[i],p2[i]=p2[i-1]*2;
for(int i=1; i<=17; i++) {
for(int j=1; j+p2[i]-1<=n; j++) {
st[i][j]=max(st[i-1][j],st[i-1][j+p2[i-1]]);
}
}
}
int query(int l,int r) {
int ll=log2(r-l+1);
return max(st[ll][l],st[ll][r-p2[ll]+1]);
}
};
int a[100001],b[100001],c[100001],d[100001],c1[100001],d1[100001];
ST_MAX s1,s3,s7,s6;
ST_MIN s2,s4,s5,s8;
signed main() {
int n,m,q;
cin>>n>>m>>q;
for(int i=1;i<=n;i++)a[i]=read(),c[i]=a[i]>=0?a[i]:-2e9,c1[i]=a[i]<=0?a[i]:2e9;
for(int i=1;i<=m;i++)b[i]=read(),d[i]=b[i]>=0?b[i]:-2e9,d1[i]=b[i]<=0?b[i]:2e9;
s1.init(n,a);
s3.init(m,b);
s2.init(n,a);
s4.init(m,b);
s5.init(n,c);
s6.init(m,c1);
s7.init(n,d);
s8.init(m,d1);
while(q--){
int l1,r1,l2,r2;
l1=read(),r1=read(),l2=read(),r2=read();
int mn1=s2.query(l1,r1),mn2=s4.query(l2,r2),mx1=s1.query(l1,r1),mx2=s3.query(l2,r2);
if(mn1>=0&&mn2>=0)cout<<mx1*mn2<<endl;
else if(mn1>=0&&mn2<=0&&mx2>=0)cout<<mn1*mn2<<endl;
else if(mn1>=0&&mx2<=0)cout<<mn1*mn2<<endl;
else if(mx1<=0&&mx2>=0&&mn2<=0)cout<<mx1*mx2<<endl;
else if(mx1<=0&&mx2<=0)cout<<mn1*mx2<<endl;
else if(mx1<=0&&mn2>=0)cout<<mx1*mx2<<endl;
else if(mn1<=0&&mx1>=0&&mn2>=0)cout<<mx1*mn2<<endl;
else if(mn1<=0&&mx1>=0&&mn2<=0&&mx2>=0)cout<<max(s6.query(l1,r1)*s7.query(l2,r2),s5.query(l1,r1)*s8.query(l2,r2))<<endl;
else if(mn1<=0&&mx1>=0&&mx2<=0)cout<<mn1*mx2<<endl;
}
}