#include <bits/stdc++.h>
#define Max(a,b,c) max(a,max(b,c))
typedef long long ll;
using namespace std;
inline ll read() {
ll x=0,f=1;
char ch=getchar();
while(!isdigit(ch)) {
if (ch=='-')
f=-1;
ch=getchar();
}
while(isdigit(ch)) {
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
inline void write(ll x) {
if(x<0) putchar('-'), x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
}
#define fi first
#define se second
const int N=114514;
int n,m[2];
struct qwq {
int co,le;
} a_0[N],a_1[N];
int ans[N][2];
int Ans=-1;
priority_queue<int> id[2];
priority_queue<pair<int,int> > tim[2];
bool cmp(qwq a,qwq b) {
return a.co<b.co;
}
void in_it_0(int x) {
for(int i=1; i<=n; i++) id[x].push(-i);
for(int i=1; i<=m[x]; i++) {
if(!tim[x].empty()) {
while(-tim[x].top().fi<a_0[i].co) {
id[x].push(tim[x].top().se);
tim[x].pop();
}
if(tim[x].empty()) break;
}
if(!id[x].empty()) {
int idd=-id[x].top();
id[x].pop();
ans[idd][x]++;
tim[x].push(make_pair(-a_0[i].le,-idd));
}
}
for(int i=1; i<=n; i++) ans[i][x]+=ans[i-1][x];
}
void in_it_1(int x) {
for(int i=1; i<=n; i++) id[x].push(-i);
for(int i=1; i<=m[x]; i++) {
if(!tim[x].empty()) {
while(-tim[x].top().fi<a_1[i].co) {
id[x].push(tim[x].top().se);
tim[x].pop();
}
if(tim[x].empty()) break;
}
if(!id[x].empty()) {
int idd=-id[x].top();
id[x].pop();
ans[idd][x]++;
tim[x].push(make_pair(-a_1[i].le,-idd));
}
}
for(int i=1; i<=n; i++) ans[i][x]+=ans[i-1][x];
}
int main() {
n=read(),m[0]=read(),m[1]=read();
for(int i=1; i<=m[0]; i++) a_0[i].co=read(),a_0[i].le=read();
for(int i=1; i<=m[1]; i++) a_1[i].co=read(),a_1[i].le=read();
sort(a_0+1,a_0+m[0]+1,cmp);
sort(a_1+1,a_1+m[1]+1,cmp);
in_it_0(0);
in_it_1(1);
for(int i=0; i<=n; i++) Ans=max(Ans,ans[i][0]+ans[n-i][1]);
write(Ans);
return 0;
}