#include<bits/stdc++.h>
using namespace std;
int n,m1,m2,sum1[100005]={0},sum2[100005]={0},cnt1[100005],cnt2[100005],r1[100005]={0},r2[100005]={0};
int Mx1=0,Mx2=0,limit1=0,limit2=0,ans=0;
struct airplane1{
int l,r;
}in[100005];
struct airplane2{
int l,r;
}out[1000005];
bool cmp1(airplane1 a,airplane1 b){
return a.l<b.l;
}
bool cmp2(airplane2 a,airplane2 b){
return a.l<b.l;
}
int main(){
// freopen("airport.in","r",stdin);
// freopen("airport.out","w",stdout);
cin>>n>>m1>>m2;
for(int i=1;i<=m1;i++){
cin>>in[i].l>>in[i].r;
sum1[in[i].l]++;
sum1[in[i].r+1]--;
Mx1=max(Mx1,in[i].r);
}
for(int i=1;i<=m2;i++){
cin>>out[i].l>>out[i].r;
sum2[out[i].l]++;
sum2[out[i].r+1]--;
Mx2=max(Mx2,out[i].r);
}
sort(in+1,in+m1+1,cmp1);
sort(out+1,out+m2+1,cmp2);
for(int i=1;i<=Mx1;i++){
sum1[i]+=sum1[i-1];
limit1=max(limit1,sum1[i]);
}
for(int i=1;i<=Mx2;i++){
sum2[i]+=sum2[i-1];
limit2=max(limit2,sum2[i]);
}
cnt1[limit1]=m1;
cnt1[0]=0;
cnt2[limit2]=m2;
cnt2[0]=0;
for(int i=limit1;i<=n;i++)cnt1[i]=m1;
for(int i=limit2;i<=n;i++)cnt2[i]=m2;
for(int i=1;i<=m1;i++){
for(int j=1;j<limit1;j++){
if(r1[j]<in[i].l){
r1[j]=in[i].r;
cnt1[j]++;
break;
}
}
}
for(int i=1;i<=m2;i++){
for(int j=1;j<limit2;j++){
if(r2[j]<out[i].l){
r2[j]=out[i].r;
cnt2[j]++;
break;
}
}
}
for(int i=1;i<limit1;i++)cnt1[i]+=cnt1[i-1];
for(int i=1;i<limit2;i++)cnt2[i]+=cnt2[i-1];
for(int i=0;i<=n;i++){
ans=max(ans,cnt1[i]+cnt2[n-i]);
}
cout<<ans<<endl;
return 0;
}