#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<cstring>
int last[100003],s1[100003],s2[100003];
struct ch
{
int ch1,ch2;
}a[100003];
struct in
{
int in1,in2;
}b[100003];
bool cmp1(ch a,ch b)
{
if(a.ch1==b.ch1) return a.ch2<b.ch2;
return a.ch1<b.ch1;
}
bool cmp2(in a,in b)
{
if(a.in1==b.in1) return a.in2<b.in2;
return a.in1<b.in1;
}
int main ()
{
//freopen("airport.in","r",stdin);
//freopen("airport.out","w",stdout);
int n,m1,m2;
scanf("%d%d%d",&n,&m1,&m2);
for(int i=1;i<=m1;i++)
{
scanf("%d%d",&a[i].ch1,&a[i].ch2);
}
for(int i=1;i<=m2;i++)
{
scanf("%d%d",&b[i].in1,&b[i].in2);
}
std::sort(a+1,a+m1+1,cmp1);
std::sort(b+1,b+m2+1,cmp2);
//printf("%d",0);
for(int i=0,q=1;i<=n;i++,q++)
{
if(i==0)
{
s1[q]=0;
continue;
}
int j=0;
if(i!=0)
{
j++;
for(;j<=i;j++)
{
last[j]=a[j].ch2;
}
}
if(i!=0) j--;
//printf("%d ",j);
int ans=j;
std::sort(last+1,last+j+1);
for(int k=j+1;k<=m1;k++)
{
if(a[k].ch1>=last[1])
{
last[1]=a[k].ch2;
ans++;
}
std::sort(last+1,last+1+j);
}
s1[q]=ans;
//printf("%d\n",ans);
}
for(int i=n,q=1;i>=0;i--,q++)
{
if(i==0)
{
s2[q]=0;
continue;
}
int j=0;
if(i!=0)
{
j++;
for(;j<=i;j++)
{
last[j]=b[j].in2;
}
}
if(i!=0) j--;
//printf("%d ",j);
int ans=j;
std::sort(last+1,last+j+1);
for(int k=j+1;k<=m1;k++)
{
if(b[k].in1>=last[1])
{
last[1]=b[k].in2;
ans++;
}
std::sort(last+1,last+1+j);
}
s2[q]=ans;
//printf("%d\n",ans);
}
int max=0;
for(int i=1;i<=(n+1);i++) if(s1[i]+s2[i]>max) max=s1[i]+s2[i];
printf("%d\n",max);
return 0;
}