#include<bits/stdc++.h>
#define gc getchar
#define LL long long
using namespace std;
inline int read(){
char c=gc(),w=0;int x=0;
while(!isdigit(c))w|=c=='-',c=gc();
while(isdigit(c))x=(x<<3)+(x<<1)+(c^48),c=gc();
return w?-x:x;
}
LL max_(LL a,LL b){
return a>b?a:b;
}
LL min_(LL a,LL b){
return a<b?a:b;
}
const int Max=100086;
int n,m,q;
int Logn[Max];
LL x_min_feifu[Max][30];
LL x_min[Max][30];
LL x_max_fu[Max][30];
LL x_max[Max][30];
LL y_max[Max][30];
LL y_min[Max][30];
int inf=1e9+5;
int main(){
n=read(),m=read(),q=read();
for(int i=1;i<=n;i++){
int x=read();
x_min[i][0]=x_max[i][0]=x;
x_max_fu[i][0]=x<=0?x:-inf;
x_min_feifu[i][0]=x>=0?x:inf;
}
for(int i=1;i<=m;i++)
y_max[i][0]=y_min[i][0]=read();
Logn[1]=0;
Logn[2]=1;
for(int i=3;i<Max;i++)
Logn[i]=Logn[i/2]+1;
for(int j=1;j<=Logn[n];j++){
for(int i=1;i+(1<<j)-1<=n;i++){
int tmp=i+(1<<(j-1));
x_max[i][j]=max_(x_max[i][j-1],x_max[tmp][j-1]);
x_min[i][j]=min_(x_min[i][j-1],x_min[tmp][j-1]);
x_max_fu[i][j]=max_(x_max_fu[i][j-1],x_max_fu[tmp][j-1]);
x_min_feifu[i][j]=min_(x_min_feifu[i][j-1],x_min_feifu[tmp][j-1]);
}
}
for(int j=1;j<=Logn[m];j++){
for(int i=1;i+(1<<j)-1<=m;i++){
int tmp=i+(1<<(j-1));
y_max[i][j]=max_(y_max[i][j-1],y_max[tmp][j-1]);
y_min[i][j]=min_(y_min[i][j-1],y_min[tmp][j-1]);
}
}
while(q--){
LL ans1=-inf,ans2=-inf,ans3=-inf,ans4=-inf;
int l1=read(),r1=read(),l2=read(),r2=read();
LL s=Logn[r2-l2+1];
LL y_max_now=max_(y_max[l2][s],y_max[r2-(1<<s)+1][s]);
LL y_min_now=min_(y_min[l2][s],y_min[r2-(1<<s)+1][s]);
s=Logn[r1-l1+1];
LL a;
a=max_(x_max[l1][s],x_max[r1-(1<<s)+1][s]);
if(a!=-inf) ans1=a>=0?y_min_now*a:y_max_now*a;
a=min_(x_min[l1][s],x_min[r1-(1<<s)+1][s]);
if(a!=inf) ans2=a>=0?y_min_now*a:y_max_now*a;
a=max_(x_max_fu[l1][s],x_max_fu[r1-(1<<s)+1][s]);
if(a!=-inf) ans3=a>=0?y_min_now*a:y_max_now*a;
a=min_(x_min_feifu[l1][s],x_min_feifu[r1-(1<<s)+1][s]);
if(a!=inf) ans4=a>=0?y_min_now*a:y_max_now*a;
LL maxx=max_(max_(ans1,ans2),max_(ans3,ans4));
cout<<maxx<<"\n";
}
}