rt
#include<cstdio>
#include<unordered_map>
#include<algorithm>
using namespace std;
#define N 2000050
#define X 2000050
#define Y 2000050
#define int long long
int n;
int w,h;
struct node
{
int x,y;
node(){}
node(int x):x(x){}
friend bool operator<(const node &a,const node &b){return a.x<b.x;}
}nods[N];
int cut_x_tot,cut_y_tot,cut_x[X],cut_y[Y];
unordered_map<int,unordered_map<int,int> > tot;
unordered_map<int,unordered_map<int,bool> > vis;
inline int read()
{
int x=0;char c=getchar();
while(c<'0'||c>'9')c=getchar();
while(c>='0'&&c<='9')x=c-'0'+(x<<1)+(x<<3),c=getchar();
return x;
}
signed main()
{
w=read(),h=read(),n=read();
for(int i=1;i<=n;++i)
nods[i].x=read(),nods[i].y=read();
cut_x_tot=read();
for(int i=1;i<=cut_x_tot;++i)
cut_x[i]=read();
cut_x[++cut_x_tot]=w;
sort(cut_x+1,cut_x+cut_x_tot+1);
cut_y_tot=read();
for(int i=1;i<=cut_y_tot;++i)
cut_y[i]=read();
cut_y[++cut_y_tot]=h;
sort(cut_y+1,cut_y+cut_y_tot+1);
int xt=0;
for(int i=1;i<=cut_x_tot;++i)
xt+=cut_x[i]-cut_x[i-1]-1>0;
int yt=0;
for(int i=1;i<=cut_y_tot;++i)
yt+=cut_y[i]-cut_y[i-1]-1>0;
int ans_max=0,ans_min=2e9;
int temp=0;
for(int i=1;i<=n;++i)
{
int xxt=upper_bound(cut_x+1,cut_x+cut_x_tot+1,nods[i].x)-cut_x;
int yyt=upper_bound(cut_y+1,cut_y+cut_y_tot+1,nods[i].y)-cut_y;
temp+=1-vis[xxt][yyt];
vis[xxt][yyt]=1;
ans_max=max(ans_max,++tot[xxt][yyt]);
ans_min=min(ans_min,tot[xxt][yyt]);
}
// printf("0 %lld",ans_max);
printf("%lld %lld",(temp>=xt*yt?ans_min:0),ans_max);
return 0;
}