#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5,inf=1e9+1;//极大值
int n,m;
int A[N],B[N],Temp[N],Log[N];
struct ST{
//将ST表简单封装了一下,避免大量代码重复
int a[N][20];
void init(int len,int cmp(int,int)){
for(int i=1;i<=len;i++) a[i][0]=Temp[i];
for(int j=1;(1<<j-1)<=len;j++){
for(int i=1;i<=len;i++){
int k=i+(1<<j-1);
a[i][j]=a[i][j-1];
if(k<=len) a[i][j]=cmp(a[i][j],a[k][j-1]);
}
}
return;
}
int value(int l,int r,int cmp(int,int)){
int siz=Log[r-l+1];
return cmp(a[l][siz],a[r-(1<<siz)+1][siz]);
}
}st[6];
/*
A pos max 0
A pos min 1
A neg max 2
A neg min 3
B max 4
B min 5
*/
int mymax(int x,int y){
return x>y ? x : y;
}
int mymin(int x,int y){
return x<y ? x : y;
}
signed main(){
int que;
scanf("%lld%lld%lld",&n,&m,&que);
for(int i=1;i<=n;i++) scanf("%lld",A+i);
for(int i=1;i<=m;i++) scanf("%lld",B+i);
//初始化ST表
for(int i=2;i<=n || i<=m;i++) Log[i]=Log[i>>1]+1;
for(int i=1;i<=n;i++) Temp[i]=A[i];
st[0].init(n,mymax);
st[3].init(n,mymin);
for(int i=1;i<=n;i++) Temp[i]=(A[i] >=0 ? A[i] : inf);
st[1].init(n,mymin);
for(int i=1;i<=n;i++) Temp[i]=(A[i] <=0 ? A[i] : -inf);
st[2].init(n,mymax);
for(int i=1;i<=m;i++) Temp[i]=B[i];
st[4].init(m,mymax);
st[5].init(m,mymin);
while(que--){
int l1,r1,l2,r2;
scanf("%lld%lld%lld%lld",&l1,&r1,&l2,&r2);
int a[]={st[0].value(l1,r1,mymax),st[1].value(l1,r1,mymin),
st[2].value(l1,r1,mymax),st[3].value(l1,r1,mymin)};
int b[]={st[4].value(l2,r2,mymax),st[5].value(l2,r2,mymin)};
long long ans=-1ll*inf*inf;
for(int i=0;i<4;i++){
long long now=min(1ll*a[i]*b[0],1ll*a[i]*b[1]);
ans=max(ans,now);
}
printf("%lld\n",ans);
}
return 0;
}