#include<bits/stdc++.h>
using namespace std;
int n,m1,m2;
int top1,top2;
const int MAXN=100005;
struct node{
int a,b;
}x1[MAXN],x2[MAXN];
int a1[MAXN],b1[MAXN],a2[MAXN],b2[MAXN];
int f1[MAXN],f2[MAXN];
int end1[MAXN],end2[MAXN];
bool cmp(node x,node y){return x.a<y.a;}
int main(){
cin>>n>>m1>>m2;
bool f=0;
for(int i=1;i<=m1;i++)cin>>x1[i].a>>x1[i].b;
for(int i=1;i<=m2;i++)cin>>x2[i].a>>x2[i].b;
sort(x1+1,x1+1+m1,cmp);
sort(x2+1,x2+1+m2,cmp);
for(int i=1;i<=m1;i++)
{
f=0;
for(int j=1;j<=top1;j++){
if(x1[i].a>=end1[j]){
f=1;
f1[j]++;
end1[j]=x1[i].b;
break;
}
}
if(f==0)f1[++top1]=1,end1[top1]=x1[i].b;
}
for(int i=1;i<=m2;i++)
{
f=0;
for(int j=1;j<=top2;j++){
if(x2[i].a>=end2[j]){
f=1;
f2[j]++;
end2[j]=x2[i].b;
break;
}
}
if(f==0)f2[++top2]=1,end2[top2]=x2[i].b;
}
for(int i=2;i<=top1;i++)f1[i]+=f1[i-1];
for(int i=2;i<=top2;i++)f2[i]+=f2[i-1];
for(int i=top1;i<=n;i++)f1[i]=f1[top1];
for(int i=top2;i<=n;i++)f2[i]=f2[top2];
int maxn=-1;
for(int i=0;i<=n;i++)maxn=max(maxn,f1[i]+f2[n-i]);
cout<<maxn;
return 0;
}