#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e5 + 10, L = 22;
template<typename T>
void read(T &x) {
x = 0; bool f = 0;
char c = getchar();
for (;!isdigit(c);c=getchar()) if (c=='-') f=1;
for (;isdigit(c);c=getchar()) x=x*10+(c^48);
if (f) x=-x;
}
template<typename F>
inline void write(F x, char ed = '\n') {
static short st[30];short tp=0;
if(x<0) putchar('-'),x=-x;
do st[++tp]=x%10,x/=10; while(x);
while(tp) putchar('0'|st[tp--]);
putchar(ed);
}
int n, m, q;
ll amx[N][L], amn[N][L], afx[N][L], azn[N][L];
ll bmx[N][L], bmn[N][L], lg[N];
void st() {
lg[1] = 0;
for(int i = 2; i <= max(n, m); i ++)
lg[i] = lg[i >> 1] + 1;
for(int j = 1; j <= lg[n]; j ++) {
for(int i = 1; i + (1 << j) - 1 <= n; i ++) {
ll k = i + (1 << (j-1));
amx[i][j] = max(amx[i][j-1], amx[k][j-1]);
amn[i][j] = min(amn[i][j-1], amx[k][j-1]);
afx[i][j] = max(afx[i][j-1], afx[k][j-1]);
azn[i][j] = min(azn[i][j-1], azn[k][j-1]);
}
}
for(int j = 1; j <= lg[m]; j ++) {
for(int i = 1; i + (1 << j) - 1 <= m; i ++) {
ll k = i + (1 << (j-1));
bmx[i][j] = max(bmx[i][j-1], bmx[k][j-1]);
bmn[i][j] = min(bmn[i][j-1], bmn[k][j-1]);
}
}
}
int main() {
read(n);
read(m);
read(q);
for(int i = 1; i <= n; i ++) {
int a;
read(a);
amn[i][0] = amx[i][0] = a;
if(a < 0) afx[i][0] = a;
else afx[i][0] = LONG_LONG_MIN;
if(a >= 0) azn[i][0] = a;
else azn[i][0] = LONG_LONG_MAX;
}
for(int i = 1; i <= m; i ++) {
int b;
read(b);
bmx[i][0] = bmn[i][0] = b;
}
st();
int la,ra,lb,rb;
while(q --) {
read(la);
read(ra);
read(lb);
read(rb);
ll a = lg[ra - la + 1];
ll ka = ra - (1 << a) + 1;
ll b = lg[rb - lb + 1];
ll kb = rb - (1 << b) + 1;
ll amax = max(amx[la][a], amx[ka][a]);
ll amin = min(amn[la][a], amn[ka][a]);
ll afmx = max(afx[la][a], afx[ka][a]);
ll azmn = min(azn[la][a], azn[ka][a]);
ll bmax = max(bmx[lb][b], bmx[kb][b]);
ll bmin = min(bmn[lb][b], bmn[lb][b]);
ll ans, bns, cns, dns;
ans = amax * (amax >= 0 ? bmin : bmax);
bns = amin * (amin >= 0 ? bmin : bmax);
if(afmx != LONG_LONG_MIN)
cns = afmx * (afmx >= 0 ? bmin : bmax);
if(azmn != LONG_LONG_MAX)
dns = azmn * (azmn >= 0 ? bmin : bmax);
printf("%lld\n",max(ans, max(bns,max(cns,dns))));
}
return 0;
}
样例过了,但全WA