#include <cmath>
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n,m,q;
long long a[100005],b[100005];
long long a_min[100005][30],a_max[100005][30],a_minus_max[100005][30],a_not_minus_min[100005][30];
long long b_max[100005][30],b_min[100005][30];
void init_a(){
for(int i = 1; i <= n; i++){
a_min[i][0] = a_max[i][0] = a[i];
if(a[i] >= 0) a_minus_max[i][0] = -1e18,a_not_minus_min[i][0] = a[i];
if(a[i] < 0) a_minus_max[i][0] = a[i],a_not_minus_min[i][0] = 1e18;
}
int t = log(n) / log(2) + 1;
for(int j = 1; j < t; j++){
for(int i = 1; i <= n - (1 << j) + 1; i++){
a_max[i][j] = max(a_max[i][j-1],a_max[i+(1<<(j-1))][j-1]);
a_min[i][j] = min(a_min[i][j-1],a_min[i+(1<<(j-1))][j-1]);
a_minus_max[i][j] = max(a_minus_max[i][j-1],a_minus_max[i+(1<<(j-1))][j-1]);
a_not_minus_min[i][j] = min(a_not_minus_min[i][j-1],a_not_minus_min[i+(1<<(j-1))][j-1]);
}
}
}
void init_b()
{
for(int i = 1; i <= m; i++) b_max[i][0] = b_min[i][0] = b[i];
int t = log(m) / log(2) + 1;
for(int j = 1; j < t; j++){
for(int i = 1; i <= n - (1<<j) + 1; i++){
b_max[i][j] = max(b_max[i][j-1],b_max[i + (1<<(j-1))][j-1]);
b_min[i][j] = min(b_min[i][j-1],b_min[i + (1<<(j-1))][j-1]);
}
}
}
long long ask(int l,int r,int id)
{
int t = log(r - l + 1) / log(2);
if(id == 1) return max(a_max[l][t],a_max[r - (1<<t) + 1][t]);
if(id == 2) return min(a_min[l][t],a_min[r - (1<<t) + 1][t]);
if(id == 3) return max(a_minus_max[l][t],a_minus_max[r - (1<<t) + 1][t]);
if(id == 4) return min(a_not_minus_min[l][t],a_not_minus_min[r - (1<<t) + 1][t]);
if(id == 5) return max(b_max[l][t],b_max[r - (1<<t) + 1][t]);
if(id == 6) return min(b_min[l][t],b_min[r - (1<<t) + 1][t]);
}
int main()
{
//freopen("game3.in","r",stdin);
//freopen("game3.out","w",stdout);
scanf("%d%d%d",&n,&m,&q);
for(int i = 1; i <= n; i++) scanf("%lld",&a[i]);
for(int i = 1; i <= m; i++) scanf("%lld",&b[i]);
init_a();
init_b();
while(q--){
int l1,r1,l2,r2; scanf("%d%d%d%d",&l1,&r1,&l2,&r2);
long long ans = -1e18;
long long tmp1 = ask(l1,r1,1),tmp2 = ask(l1,r1,2),tmp3 = ask(l1,r1,3),tmp4 = ask(l1,r1,4);
long long tmp5 = ask(l2,r2,5),tmp6 = ask(l2,r2,6);
if(tmp1 >= 0) ans = max(ans,tmp1 * tmp6);
else ans = max(ans,tmp1 * tmp5);
if(tmp2 >= 0) ans = max(ans,tmp2 * tmp6);
else ans = max(ans,tmp2 * tmp5);
if(tmp3 >= 0) ans = max(ans,tmp3 * tmp6);
else ans = max(ans,tmp3 * tmp5);
if(tmp4 >= 0) ans = max(ans,tmp4 * tmp6);
else ans = max(ans,tmp4 * tmp5);
printf("%lld\n",ans);
}
return 0;
}
AC #11 #12,其他全错