#include<bits/stdc++.h>
#define x first
#define y second
#define pf push_front
#define pb push_back
#define rep(i,a,b) for(int i=a;i<(int)(b);i++)
#define r0p(i,n) rep(i,0,n)
#define r1p(i,n) rep(i,1,n+1)
#define all(a) a.begin(),a.end()
#define dbg(a) cerr<<#a<<": "<<a<<endl
#define sz(a) (int)(a.size())
#define re(a) cout<<a<<endl,exit(0)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
const int intmx=0x3f3f3f3f;
const ll llmx=1e18;
template <typename T> inline T abs(T a){return a<0?-a:a;}
void IO(string s=""){
if(!sz(s)) return;
freopen((s+".in").c_str(),"r",stdin);
freopen((s+".out").c_str(),"w",stdout);
}
bool stt;
#define N 100005
int n,m,t;
ll a[N],b[N];
const int S=sqrt(N)+1;
struct P60_{
ll ans[N],mn[S];
vector<pair<pii,int> >q[N];
void solve(){
for(int e=0,l1,r1,l2,r2;e<t;e++){
scanf("%d%d%d%d",&l1,&r1,&l2,&r2);
rep(i,l1,r1+1){
q[i].push_back({{l2,r2},e});
}
ans[e]=LLONG_MIN;
}
if(m<=200&&n<=200){
r1p(i,n){
for(auto j:q[i]){
ll res=LLONG_MAX;
rep(k,j.x.x,j.x.y+1){
res=min(res,a[i]*b[k]);
}
ans[j.y]=max(ans[j.y],res);
}
}
}
else{
r1p(i,n){
r0p(j,S) mn[j]=LLONG_MAX;
r1p(j,m) mn[j/S]=min(mn[j/S],a[i]*b[j]);
for(auto j:q[i]){
ll res=LLONG_MAX;
if(j.x.x/S==j.x.y/S){
rep(k,j.x.x,j.x.y+1) res=min(res,a[i]*b[k]);
}
else{
for(int k=j.x.x;k<(j.x.x/S+1)*S;k++) res=min(res,a[i]*b[k]);
for(int k=j.x.x/S+1;k<j.x.y/S;k++) res=min(res,mn[k]);
for(int k=j.x.y/S*S;k<=j.x.y;k++) res=min(res,a[i]*b[k]);
}
ans[j.y]=max(ans[j.y],res);
}
}
}
r0p(e,t) printf("%lld\n",ans[e]);
exit(0);
}
}P60;
bool edd;
signed main(){
scanf("%d%d%d",&n,&m,&t);
r1p(i,n) scanf("%lld",&a[i]);
r1p(i,m) scanf("%lld",&b[i]);
P60.solve();
exit(0);
}