#include <iostream>
#include <cmath>
using namespace std;
const int MAXN = 1e5 + 1;
const int LOGMAXN = 17;
const long long INF = 0x3fffffffffffffff;
long long a[MAXN], b[MAXN];
long long maxA[MAXN][LOGMAXN], minA[MAXN][LOGMAXN];
long long maxNegA[MAXN][LOGMAXN], minPosA[MAXN][LOGMAXN];
long long maxB[MAXN][LOGMAXN], minB[MAXN][LOGMAXN];
void createST(long long table[][LOGMAXN], long long value[], int n, int logn, long long (*f)(long long, long long)) {
for(int i = 0; i < n; ++ i)
table[i][0] = value[i];
for(int k = 1; k <= logn; ++k)
for(int i = 0; i <= n - (1 << k); ++i)
table[i][k] = f(table[i][k - 1], table[i + (1 << (k - 1))][k - 1]);
}
long long query(long long table[][LOGMAXN], int l, int r, long long (*f)(long long, long long)) {
++r;
int k = (int)log2(r - l);
return f(table[l][k], table[r - (1 << k)][k]);
}
long long maxLL(long long a, long long b){
return max(a, b);
}
long long minLL(long long a, long long b){
return min(a, b);
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int n, m, q;
cin >> n >> m >> q;
for(int i = 0; i < n; ++i)
cin >> a[i];
for(int i = 0; i < m; ++i)
cin >> b[i];
createST(maxA, a, n, (int)log2(n), maxLL);
createST(minA, a, n, (int)log2(n), minLL);
createST(maxB, b, m, (int)log2(m), maxLL);
createST(minB, b, m, (int)log2(m), minLL);
for(int i = 0; i < n; ++i)
b[i] = a[i] <= 0 ? a[i] : -INF;
createST(maxNegA, b, n, (int)log2(n), maxLL);
for(int i = 0; i < n; ++i)
b[i] = a[i] >= 0 ? a[i] : INF;
createST(minPosA, b, n, (int)log2(n), minLL);
for(int i = 0; i < q; ++ i) {
int l1, r1, l2, r2;
cin >> l1 >> r1 >> l2 >> r2;
--l1;
--r1;
--l2;
--r2;
if(query(maxB, l2, r2, maxLL) < 0) {
cout << (long long)query(minA, l1, r1, minLL) * query(maxB, l2, r2, maxLL);
} else if(query(minB, l2, r2, minLL) > 0) {
cout << (long long)query(maxA, l1, r1, maxLL) * query(minB, l2, r2, minLL);
} else {
cout << max((long long)query(minPosA, l1, r1, minLL) * query(minB, l2, r2, minLL), (long long)query(maxNegA, l1, r1, maxLL) * query(maxB, l2, r2, maxLL));
}
cout << endl;
}
return 0;
}