#include<iostream>
#include<cstdio>
#include<map>
#include<algorithm>
using namespace std;
int read(){
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
x=(x<<1)+(x<<3)+c-'0';
c=getchar();
}
return x*f;
}
struct st{
int x;
int y;
};
bool operator==(const st& a,const st& b){
return a.x==b.x&&a.y==b.y;
}
st s[200005];
int p[200005];
int q[200005];
int a[200005];
int b[200005];
map<pair<int,int> ,int> mp;
bool cmp(st x,st y){
if(x.y!=y.y) return x.y<y.y;
return x.x>y.x;
}
int main(){
int w=read(),h=read();
int n=read();
for(int i=1;i<=n;i++)
p[i]=read(),q[i]=read();
int A=read();
for(int i=1;i<=A;i++)
a[i]=read();
int B=read();
for(int i=1;i<=B;i++)
b[i]=read();
int mx=0,mn=3e5;
for(int i=1;i<=n;i++){
if(p[i]>a[A]) s[i].x=A+1;
else s[i].x=lower_bound(a+1,a+A+1,p[i])-a;
if(q[i]>b[B]) s[i].y=B+1;
else s[i].y=lower_bound(b+1,b+B+1,q[i])-b;
mp[make_pair(s[i].x,s[i].y)]++;
mx=max(mx,mp[make_pair(s[i].x,s[i].y)]);
}
sort(s+1,s+n+1,cmp);
int cnt=unique(s+1,s+n+1)-s-1;
if((A+1)*(B+1)>cnt){
printf("0 %d",mx);
return 0;
}
for(int i=1;i<=cnt;i++)
mn=min(mn,mp[make_pair(s[i].x,s[i].y)]);
printf("%d %d",mn,mx);
return 0;
}