Wa #9
#include <bits/stdc++.h>
using namespace std;
const int MAXN=1e5+5;
int n,m1,m2,ans1[MAXN],ans2[MAXN],ans;
struct node{
int st,ed;
friend bool operator < (node a,node b){
return a.st<b.st;
}
}plane[MAXN];
struct node1{
int tim,id;
friend bool operator > (node1 a,node1 b){
return a.tim>b.tim;
}
};
void solve(int m,int ans[]){
memset(plane,0,sizeof plane);
for(int i=1;i<=m;i++){
scanf("%d %d",&plane[i].st,&plane[i].ed);
}
sort(plane+1,plane+1+m);
priority_queue<int,vector<int>,greater<int> > q;
priority_queue<node1,vector<node1>,greater<node1> >tmp;
for(int i=1;i<=n;i++) q.push(i);
for(int i=1;i<=m;i++){
while(!tmp.empty()&&tmp.top().tim<plane[i].st){
q.push(tmp.top().id);
tmp.pop();
}
if(!q.empty()){
++ans[q.top()];
tmp.push((node1){plane[i].ed,q.top()});
q.pop();
}
}
ans[0]=0;
for(int i=1;i<=m;i++){
ans[i]+=ans[i-1];
}
}
int main(){
//freopen("sb.in","r",stdin);
scanf("%d %d %d",&n,&m1,&m2);
solve(m1,ans1);
solve(m2,ans2);
for(int i=0;i<=n;i++){
ans=max(ans1[i]+ans2[n-i],ans);
}
printf("%d",ans);
}