#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define ll long long
int n , m , q , lg[100050];
ll a[100050] , b[100050];
struct St_ {
ll upmax , domax , upmin , domin;
St_ (ll g = 0){
upmax = -0x7fffffff;
upmin = -0x7fffffff;
domax = 0x7fffffff;
domin = 0x7fffffff;
if(g >= 0)
{
upmax = domax = g;
}
else if(g < 0) upmin = domin = g;
}
}sta[100050][27] , stb[100050][27] , ak , bk;
void ask (St_ &g , int l , int r , int mod)
{
int k = lg[r - l + 1];
if(mod == 1)
{
g.upmax = max (sta[l][k].upmax , sta[r - (1 << k) + 1][k].upmax);
g.domax = min (sta[l][k].domax , sta[r - (1 << k) + 1][k].domax);
g.upmin = max (sta[l][k].upmin , sta[r - (1 << k) + 1][k].upmin);
g.domin = min (sta[l][k].domin , sta[r - (1 << k) + 1][k].domin);
}
if(mod == 2)
{
g.upmax = max (stb[l][k].upmax , stb[r - (1 << k) + 1][k].upmax);
g.domax = min (stb[l][k].domax , stb[r - (1 << k) + 1][k].domax);
g.upmin = max (stb[l][k].upmin , stb[r - (1 << k) + 1][k].upmin);
g.domin = min (stb[l][k].domin , stb[r - (1 << k) + 1][k].domin);
}
}
int main()
{
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]);
for(int i = 1 ; i <= 100005 ; i ++) {
lg[i] = lg[i-1] + int(1 << (lg[i-1] + 1) == i);
}
for(int i = n ; i >= 1 ; i --)
{
sta[i][0] = St_(a[i]);
for(int j = 1 ; j <= lg[n - i] +1 ; j ++)
{
sta[i][j].upmax = max (sta[i][j-1].upmax , sta[i+(1<<(j-1))][j-1].upmax);
sta[i][j].domax = min (sta[i][j-1].domax , sta[i+(1<<(j-1))][j-1].domax);
sta[i][j].upmin = max (sta[i][j-1].upmin , sta[i+(1<<(j-1))][j-1].upmin);
sta[i][j].domin = min (sta[i][j-1].domin , sta[i+(1<<(j-1))][j-1].domin);
}
}
for(int i = m ; i >= 1 ; i --)
{
stb[i][0] = St_(b[i]);
for(int j = 1 ; j <= lg[m - i] +1 ; j ++)
{
stb[i][j].upmax = max (stb[i][j-1].upmax , stb[i+(1<<(j-1))][j-1].upmax);
stb[i][j].domax = min (stb[i][j-1].domax , stb[i+(1<<(j-1))][j-1].domax);
stb[i][j].upmin = max (stb[i][j-1].upmin , stb[i+(1<<(j-1))][j-1].upmin);
stb[i][j].domin = min (stb[i][j-1].domin , stb[i+(1<<(j-1))][j-1].domin);
}
}
while (q -- > 0)
{
int l1 , r1 , l2 , r2;
scanf("%d%d%d%d",&l1,&r1,&l2,&r2);
ask(ak , l1 , r1 , 1);
ask(bk , l2 , r2 , 2);
if(bk.domin == 0x7fffffff)
{
if(ak.upmax == -0x7fffffff)
{
printf("%lld\n",ak.upmin * bk.upmax);
}
else printf("%lld\n",ak.upmax * bk.domax);
}
else if(bk.upmax == -0x7fffffff)
{
if(ak.domin == 0x7fffffff)
{
printf("%lld\n",ak.domax * bk.domin);
}
else printf("%lld\n",ak.domin * bk.upmin);
}
else
{
if(ak.upmin == 0x7fffffff) printf("%lld\n",ak.domax * bk.domin);
else printf("%lld\n",max(ak.domax*bk.domin,ak.upmin*bk.upmax));
}
}
return 0;
}