#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main () {
freopen("yangli.cpp","r",stdin);
int n, m, q;
cin >> n >> m >> q;
int a[n], b[m];
for (int i = 0; i < n; i++) {
cin >> a[i];
}
for (int i = 0; i < m; i++) {
cin >> b[i];
}
struct I {
int gp, lp, gn, ln;
I(int a, int b, int c, int d) {
gp = a;
lp = b;
gn = c;
ln = d;
}
I() {
gp = lp = gn = ln = 0;
}
};
I ia, ib;
for (int _ = 0; _ < q; _++) {
int l1, r1, l2, r2;
cin >> l1 >> r1 >> l2 >> r2;
l1--, r1--, l2--, r2--;
{
int maxp = -1, minp = LONG_LONG_MAX;
int maxn = 1, minn = LONG_LONG_MIN;
for (int i = l1 ; i <= r1; i++) {
if (a[i] >= 0) {
if (a[i] > maxp) {
maxp = a[i];
}
if (a[i] < minp) {
minp = a[i];
}
}
if (a[i] < 0) {
if (a[i] < maxn) {
maxn = a[i];
}
if (a[i] > minn) {
minn = a[i];
}
}
}
ia.gn = maxn;
ia.gp = maxp;
ia.ln = minn;
ia.lp = minp;
};
{
int maxp = -1, minp = LONG_LONG_MAX;
int maxn = 1, minn = LONG_LONG_MIN;
for (int i = l2 ; i <= r2; i++) {
if (b[i] >= 0) {
if (b[i] > maxp) {
maxp = b[i];
}
if (b[i] < minp) {
minp = b[i];
}
}
if (b[i] < 0) {
if (b[i] < maxn) {
maxn = b[i];
}
if (b[i] > minn) {
minn = b[i];
}
}
}
ib.gn = maxn;
ib.gp = maxp;
ib.ln = minn;
ib.lp = minp;
};
int ppp, nnn;
if (ib.gn != 1) {
// cout << "\t|1" << endl;
ppp = ib.gn * ia.lp;
} else {
// cout << "\t|2" << endl;
ppp = ib.lp * ia.gp;
}
if (ib.lp != INT_MAX) {
// cout << "\t|3" << endl;
nnn = ib.gp * ia.ln;
} else {
// cout << "\t|4" << endl;
nnn = ib.ln * ia.gn;
}
cout << max(nnn, ppp) << endl;
}
return 0;
}