#include <bits/stdc++.h>
#define ll long long
#define int long long
using namespace std;
const int N = 1e5;
ll read(){
ll s=0,f=1; char ch = getchar();
while(!isdigit(ch) && ch != '-') ch = getchar();
if(ch == '-'){f = -1; ch = getchar();}
while(isdigit(ch)) {s = s*10+ch-'0'; ch = getchar();}
return s*f;
}
int n,m1,m2;
int s1[N],s2[N],t[N];
struct nod{
int a,b;
bool operator <(const nod &x)const{
return a < x.a;
}
}a1[N],a2[N];
struct node{
int x,z;
bool operator <(const node &a)const{
return z > a.z;
}
};
priority_queue <node> q1,p1;
priority_queue <int,vector<int>,greater<int> > q2,p2;
signed main(){
n = read(); m1 = read(); m2 = read();
n = min(n,m1+m2);
for(int i=1;i<=m1;i++){a1[i].a = read(); a1[i].b = read();}
for(int i=1;i<=m2;i++){a2[i].a = read(); a2[i].b = read();}
sort(a1+1,a1+1+m1);
sort(a2+1,a2+1+m2);
for(int i=1;i<=m1;i++)
q2.push(i);
for(int i=1;i<=m1;i++){
node a;
if(!q1.empty()) a = q1.top();
while(!q1.empty() && a.z < a1[i].a){
q1.pop(); q2.push(t[a.x]);
if(!q1.empty()) a = q1.top();
}
q1.push(node{i,a1[i].b}); t[i] = q2.top(); q2.pop(); s1[t[i]]++;
}
for(int i=0;i<=n;i++)
s1[i] = s1[i-1]+s1[i];
for(int i=1;i<=m2;i++)
p2.push(i);
for(int i=1;i<=m2;i++){
node a;
if(!p1.empty()) a = p1.top();
while(!p1.empty() && a.z < a2[i].a){
p1.pop(); p2.push(t[a.x]);
if(!p1.empty()) a = p1.top();
}
p1.push(node{i,a2[i].b}); t[i] = p2.top(); p2.pop(); s2[t[i]]++;
}
for(int i=0;i<=n;i++)
s2[i] = s2[i-1]+s2[i];
int ans = 0;
for(int i=0;i<=min(n,min(m1,m2));i++)
ans = max(ans,s1[i]+s2[n-i]);
cout << ans;
return 0;
}
爆测试点#14,15 但明明我自己下数据测就能过