#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
int n, m, q, a[maxn], b[maxn], amin[maxn][25], amax[maxn][25], anmax[maxn][25], apmin[maxn][25], bmin[maxn][25], bmax[maxn][25], lg2[maxn];
void init() {
memset(amin, 0x3f, (n + 1) * 20 * 4);
memset(amax, ~0x3f, (n + 1) * 20 * 4);
memset(anmax, ~0x3f, (n + 1) * 20 * 4);
memset(apmin, 0x3f, (n + 1) * 20 * 4);
memset(bmin, 0x3f, (n + 1) * 20 * 4);
memset(bmax, ~0x3f, (n + 1) * 20 * 4);
for (int i = n; i >= 1; i--) {
amin[i][0] = a[i];
for (int j = 1; i + (1 << j) - 1 <= n; j++)
amin[i][j] = min(amin[i][j - 1], amin[i + (1 << j - 1)][j - 1]);
}
for (int i = n; i >= 1; i--) {
amax[i][0] = a[i];
for (int j = 1; i + (1 << j) - 1 <= n; j++)
amax[i][j] = max(amax[i][j - 1], amax[i + (1 << j - 1)][j - 1]);
}
for (int i = n; i >= 1; i--) {
if (a[i] < 0)
anmax[i][0] = a[i];
for (int j = 1; i + (1 << j) - 1 <= n; j++)
anmax[i][j] = max(anmax[i][j - 1], anmax[i + (1 << j - 1)][j - 1]);
}
for (int i = n; i >= 1; i--) {
if (a[i] >= 0)
apmin[i][0] = a[i];
for (int j = 1; i + (1 << j) - 1 <= n; j++)
apmin[i][j] = min(apmin[i][j - 1], apmin[i + (1 << j - 1)][j - 1]);
}
for (int i = m; i >= 1; i--) {
bmin[i][0] = b[i];
for (int j = 1; i + (1 << j) - 1 <= m; j++)
bmin[i][j] = min(bmin[i][j - 1], bmin[i + (1 << j - 1)][j - 1]);
}
for (int i = m; i >= 1; i--) {
bmax[i][0] = b[i];
for (int j = 1; i + (1 << j) - 1 <= m; j++)
bmax[i][j] = max(bmax[i][j - 1], bmax[i + (1 << j - 1)][j - 1]);
}
for (int i = 2; i <= max(n, m); i++)
lg2[i] = lg2[i >> 1] + 1;
}
int get_amin(int l, int r) {
int lg = lg2[r - l + 1];
return min(amin[l][lg], amin[r - (1 << lg) + 1][lg]);
}
int get_amax(int l, int r) {
int lg = lg2[r - l + 1];
return max(amax[l][lg], amax[r - (1 << lg) + 1][lg]);
}
int get_anmax(int l, int r) {
int lg = lg2[r - l + 1];
return max(anmax[l][lg], anmax[r - (1 << lg) + 1][lg]);
}
int get_apmin(int l, int r) {
int lg = lg2[r - l + 1];
return min(apmin[l][lg], apmin[r - (1 << lg) + 1][lg]);
}
int get_bmin(int l, int r) {
int lg = lg2[r - l + 1];
return min(bmin[l][lg], bmin[r - (1 << lg) + 1][lg]);
}
int get_bmax(int l, int r) {
int lg = lg2[r - l + 1];
return min(bmax[l][lg], bmax[r - (1 << lg) + 1][lg]);
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> n >> m >> q;
for (int i = 1; i <= n; i++)
cin >> a[i];
for (int i = 1; i <= m; i++)
cin >> b[i];
init();
while (q--) {
int l1, r1, l2, r2;
cin >> l1 >> r1 >> l2 >> r2;
if (get_bmin(l2, r2) < 0 && get_bmax(l2, r2) >= 0) {
if (get_apmin(l1, r1) != 0x3f3f3f3f && get_anmax(l1, r1) != 0x3f3f3f3f)
cout << max(1LL * get_apmin(l1, r1) * get_bmin(l2, r2), 1LL * get_anmax(l1, r1) * get_bmax(l2, r2)) << "\n";
else if (get_apmin(l1, r1) != 0x3f3f3f3f)
cout << 1LL * get_apmin(l1, r1) * get_bmin(l2, r2) << "\n";
else
cout << 1LL * get_anmax(l1, r1) * get_bmax(l2, r2) << "\n";
} else if (get_bmax(l2, r2) < 0)
cout << min(1LL * get_amin(l1, r1) * get_bmin(l2, r2), 1LL * get_amin(l1, r1) * get_bmax(l2, r2)) << "\n";
else
cout << min(1LL * get_amax(l1, r1) * get_bmin(l2, r2), 1LL * get_amax(l1, r1) * get_bmax(l2, r2)) << "\n";
}
}
/kk