#include <bits/stdc++.h>
using namespace std;
int n, m1, m2, q[100005];
struct node {
int a, b;
} s1[100005], s2[100005];
long long ans(int f) {
long long cnt1 = 0, cnt2 = 0;
for (int i = 1; i <= n; i++) q[i] = 0;
for (int i = 1; i <= m1; i++) {
for (int j = 1; j <= f; j++) {
if (q[j] < s1[i].a) {
cnt1++;
q[j] = s1[i].b;
break;
}
}
}
for (int i = 1; i <= m2; i++) {
for (int j = f+1; j <= n; j++) {
if (q[j] < s2[i].a) {
cnt2++;
q[j] = s2[i].b;
break;
}
}
}
return cnt1+cnt2;
}
int main () {
cin >> n >> m1 >> m2;
for (int i = 1; i <= m1; i++) cin >> s1[i].a >> s1[i].b;
for (int i = 1; i <= m2; i++) cin >> s2[i].a >> s2[i].b;
int l = 1, r = n;
while (l + 1 < r) {
int mid = (l + r) / 2;
long long ll = ans(l), rr = ans(mid);
if (ll < rr) {
l = mid;
} else {
r = mid - 1;
}
}
cout << max(ans(l), ans(r)) << endl;
return 0;
}