#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+9;
struct Node{
int start,ed;
};
Node a[N],b[N];
int n,m,q,ans1[N],ans2[N],ans;
bool cmp(Node a,Node b){
return a.start<b.start;
}
void change(Node k[],int res[],int s){
priority_queue<int,vector<int>, greater<int>>can;
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>wait;/*1:end,2:lq*/
for(int i=1;i<=n;i++) can.push(i);
for(int i=1;i<=s;i++){
while(!wait.empty()&&k[i].start>=wait.top().first){
can.push(wait.top().second);
wait.pop();
}
if(can.empty()) continue;
int lq=can.top();
can.pop();
res[lq]++;
wait.push(make_pair(k[lq].ed,lq));
}
for(int i=1;i<=n;i++) res[i]+=res[i-1];
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.flush();
cin>>n>>m>>q;
for(int i=1;i<=m;i++) cin>>a[i].start>>a[i].ed;
for(int i=1;i<=q;i++) cin>>b[i].start>>b[i].ed;
sort(a+1,a+m+1,cmp);
sort(b+1,b+q+1,cmp);
change(a,ans1,m);
change(b,ans2,q);
for(int i=0;i<=n;i++) ans=max(ans,ans1[i]+ans2[n-i]);
cout<<ans;
return 0;
}