两个优先队列 维护飞机离开的最早时间
#include <bits/stdc++.h>
using namespace std;
#define int long long
inline int read(){
int x;
scanf("%d",&x);
return x;
}
struct p{
int arr,lea;
bool operator <(const p &a) const {return lea>a.lea;}
};
int ans;
int n,m1,m2;
p p1[100010],p2[100010];
bool cmp (p a,p b){
return a.arr<b.arr;
}
void cal(int s)
{
int tol=0;
priority_queue<p> q;
if(s>0)
for(int i=1;i<=s;i++)
{
q.push(p1[i]);
tol++;
}
if (s>0) for(int i=s+1;i<=m1;i++)
{
p topp=q.top();
if(p1[i].arr<=topp.lea) continue;
q.pop();
q.push(p1[i]);
tol++;
}
priority_queue<p> q2;
if(n-s>0)
for(int i=1;i<=n-s;i++)
{
q2.push(p2[i]);
tol++;
}
if (n-s>0) for(int i=n-s+1;i<=m2;i++)
{
p top2=q2.top();
if(p2[i].arr<=top2.lea) continue;
q2.pop();
q2.push(p2[i]);
tol++;}
ans=max(ans,tol);
}
signed main(){
n=read(),m1=read(),m2=read();
for(int i=1;i<=m1;i++)
p1[i].arr=read(),p1[i].lea=read();
for(int i=1;i<=m2;i++)
p2[i].arr=read(),p2[i].lea=read();
sort(p1+1,p1+1+m1,cmp);sort(p2+1,p2+1+m2,cmp);
for(int i=0;i<=n;i++) cal(i);
cout<<ans;
return 0;
}