#include <bits/stdc++.h>
#include <set>
#include <vector>
using namespace std;
struct plane{
int get;
int go;
bool operator<(const plane &a)const{return get<a.get;}
bool operator>(const plane &a)const{return get>a.get;}
bool operator==(const plane &a)const{return get==a.get and go==a.go;}
};
set<plane> p1;
set<plane> p2;
int plns1[100000]={},plns2[100000]={};
int n,m1,m2;
int main(){
cin>>n>>m1>>m2;
for(int i=0;i<m1;i++){
plane* p=new plane;
cin>>p->get>>p->go;
p1.insert(*p);
}
for(int i=0;i<m2;i++){
plane* p=new plane;
cin>>p->get>>p->go;
p2.insert(*p);
}
vector<plane> v;
set<plane>::iterator it;
for(int i=1;i<=n;i++){
int time=-1;
for(it=p1.begin();it!=p1.end() and !p1.empty();it++){
if(time<(*it).get){
plns1[i]++;
time=(*it).go;
v.push_back(*it);
}
}
vector<plane>::iterator vt;
for(vt=v.begin();vt!=v.end();vt++){
p1.erase(*vt);
}
v.clear();
}
for(int i=1;i<=n;i++){
int time=-1;
for(it=p2.begin();it!=p2.end() and !p2.empty();it++){
if(time<(*it).get){
plns2[i]++;
time=(*it).go;
v.push_back(*it);
}
}
vector<plane>::iterator vt;
for(vt=v.begin();vt!=v.end();vt++){
p2.erase(*vt);
}
v.clear();
}
for(int i=0;i<n;i++){
plns1[i+1]+=plns1[i];
plns2[i+1]+=plns2[i];
}
int ans=0;
for(int i=0;i<=n;i++){
ans=max(ans,plns1[i]+plns2[n-i]);
}
cout<<ans;
}