#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair i_i; typedef pair ll_i; typedef pair d_i; typedef pair ll_ll; typedef pair d_d; struct edge { int u, v; ll w; }; ll MOD = 1000000007; ll _MOD = 1000000009; double EPS = 1e-10; int main() { int N; cin >> N; int n; cin >> n; vector a(n); for (int i = 0; i < n; i++) cin >> a[i]; int m; cin >> m; vector b(m); for (int j = 0; j < m; j++) cin >> b[j]; vector A(n), B(m); int cnt = 0; while (N--) { bool ok = false; for (int i = 0; i < n; i++) if (A[i]) ok = true; if (!ok) for (int i = 0; i < n; i++) A[i] = true; ok = false; for (int j = 0; j < m; j++) if (B[j]) ok = true; if (!ok) for (int j = 0; j < m; j++) B[j] = true; int maxi = 0; for (int i = 0; i < n; i++) if (A[i]) maxi = max(maxi, a[i]); int maxi2 = 0; for (int j = 0; j < m; j++) if (B[j] && b[j] < maxi) maxi2 = max(maxi2, b[j]); int _i, mini = INT_MAX; for (int i = 0; i < n; i++) if (A[i] && a[i] > maxi2 && a[i] < mini) { _i = i; mini = a[i]; } int _j, maxi3 = 0; for (int j = 0; j < m; j++) if (B[j] && (maxi2 == 0 || b[j] < mini) && b[j] > maxi3) { _j = j; maxi3 = b[j]; } //cout << mini << endl; A[_i] = B[_j] = false; if (a[_i] > b[_j]) cnt++; //cout << _i << ' ' << _j << endl; } cout << cnt << endl; }