记录
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
const int INF=1e18+1;
const int maxn=1e5+5;
int log[maxn],len[8],n,m,q,x;
ll st[8][maxn][25];
inline ll cmp(ll a,ll b,bool t){
return t?(a<b?a:b):(a>b?a:b);
}
inline ll query(int l,int r,int val){
int k=log[r-l+1];
return cmp(st[val][l][k],st[val][r-(1<<k)+1][k],val&1);
}
int main(){
scanf("%d%d%d",&n,&m,&q);
len[1]=len[2]=len[3]=len[4]=n;
len[5]=len[6]=m;
for(int i=2;i<=cmp(n,m,0);i++)
log[i]=log[i>>1]+1;
for(int i=1;i<=n;i++){
scanf("%d",&x);
st[1][i][0]=st[2][i][0]=x;
st[3][i][0]=(x>=0?x:INF);
st[4][i][0]=(x<0?x:-INF);
}
for(int i=1;i<=m;i++){
scanf("%d",&x);
st[5][i][0]=st[6][i][0]=x;
}
for(int k=1;k<=6;k++)
for(int j=1;(1<<j)<=len[k];j++)
for(int i=1;i+(1<<(j-1))<=len[k];i++)
st[k][i][j]=cmp(st[k][i][j-1],st[k][i+(1<<(j-1))][j-1],k&1);
while(q--){
int l1,r1,l2,r2;
scanf("%d%d%d%d",&l1,&r1,&l2,&r2);
ll ans,bmin=query(l2,r2,5),bmax=query(l2,r2,6);
if(bmin>=0) ans=query(l1,r1,2)*bmin;
else ans=query(l1,r1,3)*bmin;
if(bmax>=0) ans=cmp(ans,query(l1,r1,4)*bmax,0);
else ans=cmp(ans,query(l1,r1,1)*bmax,0);
printf("%lld\n",ans);
}
return 0;
}