#include<stdio.h>
#include<algorithm>
#include<vector>
using namespace std;
int k,m1,m2;
struct node{
int f,t;
};
int cmp(node a,node b)
{
if(a.f<b.f)
return 1;
else return 0;
}
int dp[100005];
node gn[100005];
node gj[100005];
bool f1[100005];
bool f2[100005];
int ans;
int alans;
int dfs1(int kk,int num)
{
ans=max(ans,num);
for(int i=kk;i<=m1;i++)
{
if(f1[i]==0&&gn[kk].t<gn[i].f)
{
f1[i]=1;
dfs1(i,num+1);
break;
}
}
}
int dfs2(int kk,int num)
{
ans=max(ans,num);
for(int i=kk;i<=m2;i++)
{
if(f2[i]==0&&gj[kk].t<gj[i].f)
{
f2[i]=1;
dfs2(i,num+1);
break;
}
}
}
int main()
{
// freopen("airport.in","r",stdin);
// freopen("airport.out","w",stdout);
scanf("%d%d%d",&k,&m1,&m2);
for(int i=1;i<=m1;i++)
{
scanf("%d%d",&gn[i].f,&gn[i].t);
}
for(int i=1;i<=m2;i++)
{
scanf("%d%d",&gj[i].f,&gj[i].t);
}
sort(gn+1,gn+m1+1,cmp);
sort(gj+1,gj+m2+1,cmp);
int ws=1;
int aans1[100005]={};
int aans2[100005]={};
for(int i=1;i<=m1;i++)
{
if(f1[i]==0)
{
f1[i]=1;
ans=0;
dfs1(i,1);
aans1[ws]=ans+aans1[ws-1];
ws++;
}
}
ws=1;
for(int i=1;i<=m2;i++)
{
if(f2[i]==0)
{
f2[i]=1;
ans=0;
dfs2(i,1);
aans2[ws]=ans+aans2[ws-1];
ws++;
}
}
for(int i=0;i<=k;i++)
alans=max(aans1[i]+aans2[k-i],alans);
printf("%d ",alans);
printf("\n");
return 0;
}