#include<cstdio>
#include<algorithm>
#include<set>
#define N 10000005
using namespace std;
struct node{
int l,r;
bool operator<(const node &a)const{if(l==a.l)return r<a.r;else return l<a.l;}
}a1[N],a2[N];
set<node> st;
int n,m1,m2,f1[N],f2[N],ans;
signed main(){
scanf("%d%d%d",&n,&m1,&m2);
for(int i=1;i<=m1;i++)scanf("%d%d",&a1[i].l,&a1[i].r);
for(int i=1;i<=m2;i++)scanf("%d%d",&a2[i].l,&a2[i].r);
st.clear();for(int i=1;i<=m1;i++)st.insert(a1[i]);
for(int i=1;i<=m1;i++){
int pos=0,c=0;
while(1){
set<node>::iterator it;
it=st.lower_bound((node){pos,pos});
if(it==st.end())break;
pos=it->r;
st.erase(it);
c++;
}
f1[i]=f1[i-1]+c;
}
st.clear();for(int i=1;i<=m2;i++)st.insert(a2[i]);
for(int i=1;i<=m2;i++){
int pos=0,c=0;
while(1){
set<node>::iterator it;
it=st.lower_bound((node){pos,pos});
if(it==st.end())break;
pos=it->r;
st.erase(it);
c++;
}
f2[i]=f2[i-1]+c;
}
for(int i=0;i<=n;i++)ans=max(ans,f1[i]+f2[n-i]);
printf("%d",ans);
return 0;
}