#include<bits/stdc++.h>
#define itn int
#define ll long long
#define ld long double
#define str string
#define enld endl
#define endl '\n'
#define pii pair<int,int>
#define s_int set<int>::iterator
#define ms_int multiset<int>::iterator
#define s_ll set<long long>::iterator
#define ms_ll multiset<long long>::iterator
#define mp_int map<str,int>::iterator
#define pb push_back
const int N = 1e5+5;
using namespace std;
inline ll read(){
ll 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;
}
ll n,m,q,lg[N],sum[N],sum1[N];
ll st[N][25][7],st1[N][25][7];
ll qmax(ll l,ll r,ll num){
ll k=r-l+1;
return max(st[l][lg[k]][num],st[r-(1<<lg[k])+1][lg[k]][num]);
}
ll qmin(ll l,ll r,ll num){
ll k=r-l+1;
return min(st[l][lg[k]][num],st[r-(1<<lg[k])+1][lg[k]][num]);
}
ll qmax1(ll l,ll r,ll num){
ll k=r-l+1;
return max(st1[l][lg[k]][num],st1[r-(1<<lg[k])+1][lg[k]][num]);
}
ll qmin1(ll l,ll r,ll num){
ll k=r-l+1;
return min(st1[l][lg[k]][num],st1[r-(1<<lg[k])+1][lg[k]][num]);
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
n=read();
m=read();
q=read();
lg[0]=-1;
for(ll i=1;i<=n;i++) st[i][0][1]=0-1e9-50,st[i][0][3]=0-1e9-50;
for(ll i=1;i<=n;i++) st[i][0][2]=1e9+50,st[i][0][4]=1e9+50;
for(ll i=1;i<=n;i++) st1[i][0][1]=0-1e9-50,st1[i][0][3]=0-1e9-50;
for(ll i=1;i<=n;i++) st1[i][0][2]=1e9+50,st1[i][0][4]=1e9+50;
for(ll i=1;i<=n;i++){
ll x=read();
if(x>=0) st[i][0][1]=st[i][0][3]=x;
else st[i][0][2]=st[i][0][4]=x,sum[i]++;
}
for(ll i=1;i<=m;i++){
ll x;x=read();
if(x>=0) st1[i][0][1]=st1[i][0][3]=x;
else st1[i][0][2]=st1[i][0][4]=x,sum1[i]++;
}
for(ll i=1;i<=n;i++) lg[i]=lg[i>>1]+1;
for(ll j=1;j<=lg[n];j++){
for(ll i=1;i+(1<<j-1)<=n;i++){
st[i][j][1]=max(st[i][j-1][1],st[i+(1<<j-1)][j-1][1]);
st[i][j][2]=max(st[i][j-1][2],st[i+(1<<j-1)][j-1][2]);
st[i][j][3]=min(st[i][j-1][3],st[i+(1<<j-1)][j-1][3]);
st[i][j][4]=min(st[i][j-1][4],st[i+(1<<j-1)][j-1][4]);
st1[i][j][1]=max(st1[i][j-1][1],st1[i+(1<<j-1)][j-1][1]);
st1[i][j][2]=max(st1[i][j-1][2],st1[i+(1<<j-1)][j-1][2]);
st1[i][j][3]=min(st1[i][j-1][3],st1[i+(1<<j-1)][j-1][3]);
st1[i][j][4]=min(st1[i][j-1][4],st1[i+(1<<j-1)][j-1][4]);
}
}
for(ll i=1;i<=q;i++){
ll x,y,xx,yy;
x=read(),y=read();
xx=read(),yy=read();
if(sum[y]-sum[x-1]>0){
if(sum[y]-sum[x-1]<y-x){
if(sum1[yy]-sum1[xx-1]>0){
if(sum1[yy]-sum1[xx-1]<y-x){
cout <<max(qmin(x,y,3)*qmin1(xx,yy,4),qmax(x,y,2)*qmax1(xx,yy,1)) <<endl;
}
else{
cout <<qmin(x,y,4)*qmax1(xx,yy,2) <<endl;
}
}
else{
cout <<qmax(x,y,1)*qmin1(xx,yy,3) <<endl;
}
}
else{
if(sum1[yy]-sum1[xx-1]>0){
if(sum1[yy]-sum1[xx-1]<y-x){
cout <<qmin(x,y,2)*qmin1(xx,yy,4) <<endl;
}
else{
cout <<qmin(x,y,4)*qmax1(xx,yy,2) <<endl;
}
}
else{
cout <<qmax(x,y,2)*qmin1(xx,yy,3) <<endl;
}
}
}
else{
if(sum1[yy]-sum1[xx-1]>0){
if(sum1[yy]-sum1[xx-1]<y-x){
cout <<max(qmin(x,y,3)*qmin1(xx,yy,4),qmax(x,y,2)*qmax1(xx,yy,1)) <<endl;
}
else{
cout <<qmin(x,y,3)*qmax1(xx,yy,2) <<endl;
}
}
else{
cout <<qmax(x,y,1)*qmin1(xx,yy,3) <<endl;
}
}
}
return 0;
}