#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
const int M = 100010;
struct name{
int kai,jie;
}a[M];
inline bool cmp(name a,name b){
return a.kai < b.kai;
}
inline int max(int a,int b)
{
return a>b?a:b;
}
int n,m1,m2;
int ans,sum1[M],sum2[M];
inline int read()
{
int x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
return x*f;
}
priority_queue<int,vector<int>,greater<int> > q1,q2;
int main(){
n=read();
m1=read();
m2=read();
for(int i=1 ; i<=m1 ; ++i){
a[i].kai=read();
a[i].jie=read();
}
sort(a+1,a+m1+1,cmp);
sum1[0] = 0;
sum2[0] = 0;
for(int i=1 ; i<=n ; ++i){
int cnt = i;
int sum = 0;
for(int j=1 ; j<=m1 ; ++j){
if(j==1){
q1.push(a[j].jie);
sum++;
continue;
}
if(a[j].kai < q1.top()){
if(cnt-1 <= 0){
continue;
}
else{
cnt--;
sum++;
q1.push(a[j].jie);
continue;
}
}
else{
sum++;
q1.push(a[j].jie);
q1.pop();
continue;
}
}
sum1[i] = sum;
}
for(int i=1 ; i<=m2 ; ++i){
a[i].kai=read();
a[i].jie=read();
}
sort(a+1,a+m2+1,cmp);
for(int i=1 ; i<=n ; ++i){
int cnt = i;
int sum = 0;
for(int j=1 ; j<=m2 ; ++j){
if(j==1){
q2.push(a[j].jie);
sum++;
continue;
}
if(a[j].kai < q2.top()){
if(cnt-1 <= 0){
continue;
}
else{
cnt--;
sum++;
q2.push(a[j].jie);
continue;
}
}
else{
sum++;
q2.push(a[j].jie);
q2.pop();
continue;
}
}
sum2[i] = sum;
}
for(int i=0 ; i<=n ; ++i){
ans = max(ans,sum1[i] + sum2[n-i]);
}
printf("%d\n",ans);
return 0;
}