#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,m1,m2,ans,ans1[N],ans2[N];
struct node{
int begin;
int end;
}a[N],b[N];
bool comp(node a,node b){
return a.begin<b.begin;
}
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >lq;
priority_queue<int, vector<int>, greater<int> > wq;
int check(node fei[],int m,int ans0[]){
while(!lq.empty()) lq.pop();
while(!wq.empty()) wq.pop();
for(int i=1; i<=n;i++) wq.push(i);
for(int i=1;i<=m;i++){
while(!lq.empty()&&fei[i].begin>=lq.top().first){
wq.push(lq.top().second);
lq.pop();
}
if(!wq.empty()){
int dest = wq.top();
wq.pop();
ans0[dest]++;
lq.push(make_pair(fei[i].end,dest));
}
}
for(int i=1;i<=n;i++) ans0[i]=ans0[i-1]+ans0[i];
}
int main(){
ios::sync_with_stdio(false);
cin>>n>>m1>>m2;
for(int i=1;i<=m1;i++) cin>>a[i].begin>>a[i].end;
for(int i=1;i<=m2;i++) cin>>b[i].begin>>b[i].end;
sort(a+1,a+m1+1,comp);
sort(b+1,b+m2+1,comp);
check(a,m1,ans1);
check(b,m2,ans2);
for(int i=0;i<=n;i++){
ans=max((ans1[i]+ans2[n-i]),ans);
}
cout<<ans;
return 0;
}