#include<iostream>
#include<cstdio>
#include<algorithm>
const int Maxn = 1e5 + 5;
struct e {
int q1, l1;
} a1[Maxn];
struct E {
int q2, l2;
} a2[Maxn];
bool cmp1(e x, e y) {
return x.q1 < y.q1;
}
bool cmp2(E x, E y) {
return x.q2 < y.q2;
}
int n,m1,m2;
int q1[100005],l1[100005],q2[100005],l2[100005],a[100005],b[100005];
int ansa[100005],ansb[100005],zong[100005];
using namespace std;
int main()
{
scanf("%d%d%d",&n,&m1,&m2);
for(int i=1;i<=m1;i++)
scanf("%d%d",&a1[i].q1,&a1[i].l1);
sort(a1+1,a1+m1+1,cmp1);
for(int i=1;i<=m2;i++)
scanf("%d%d",&a2[i].q2,&a2[i].l2);
sort(a2+1,a2+m2+1,cmp2);
for(int i=0;i<=n;i++)
{
int a[100005]={0},b[100005]={0};
int j=n-i;
int aans=0,bans=0;
for(int m=1;m<=m1;m++)
{
int x=a1[m].q1;
for(int n=1;n<m;n++)
{
if(a1[n].l1<x&&a[n]==1)
{
a[n]=0;
aans--;
}
}
if(aans<i)
{
aans++;
ansa[i]++;
a[m]=1;
}
}
for(int m=1;m<=m2;m++)
{
int x=a2[m].q2;
for(int n=1;n<m;n++)
{
if(a2[n].l2<x&&b[n]==1)
{
b[n]=0;
bans--;
}
}
if(bans<j)
{
bans++;
ansb[i]++;
b[m]=1;
}
}
}
for(int i=0;i<=n;i++)
{
zong[i]=ansa[i]+ansb[i];
}
int maxx=0;
for(int i=0;i<=n;i++)
{
if(zong[i]>maxx)
maxx=zong[i];
}
printf("%d",maxx);
return 0;
}