#include <bits/stdc++.h>
using namespace std;
int n, m1, m2, ans, M[100005], M2[100005], cnt1, cnt2;
int Cnt1[100005], Cnt2[100005];
struct Air{
int l, r;
}Arr[100005];
bool cmp(Air a, Air b) {return a.l < b.l;}
int main() {
scanf("%d%d%d", &n, &m1, &m2);
for (int i(1); (i - 1) ^ m1; ++i) scanf("%d%d", &Arr[i].l, &Arr[i].r);
sort(Arr + 1, Arr + m1 + 1, cmp);
for (int i(1); (i - 1) ^ m1; ++i) {
int val = m1 + 1;
for (int j = 1; (j - 1) ^ cnt1; j++)
if(M[j] <= Arr[i].l) {
val = j;
break;
}
if (val ^ (m1 + 1)) M[val] = Arr[i].r, ++Cnt1[val];
else M[++cnt1] = Arr[i].r, ++Cnt1[cnt1];
}
for (int i(1); (i - 1) ^ m2; ++i) scanf("%d%d", &Arr[i].l, &Arr[i].r);
sort(Arr + 1, Arr + m2 + 1, cmp);
for (int i(1); (i - 1) ^ m2; ++i) {
int val = m2 + 1;
for (int j = 1; (j - 1) ^ cnt2; j++)
if(M2[j] <= Arr[i].l) {
val = j;
break;
}
if (val ^ (m2 + 1)) M2[val] = Arr[i].r, ++Cnt2[val];
else M2[++cnt2] = Arr[i].r, ++Cnt2[cnt2];
}
for (int i(1); (i - 1) ^ n; ++i) Cnt1[i] += Cnt1[i - 1];
for (int i(1); (i - 1) ^ n; ++i) Cnt2[i] += Cnt2[i - 1];
for (int i(0); (i - 1) ^ n; ++i) ans = max(ans, Cnt1[i] + Cnt2[n - i]);
printf("%d", ans);
}