#include <bits/stdc++.h>
using namespace std;
using ll = long long;
void solve() {
ll n, m;
if (!(cin >> n >> m)) return;
vector<pair<ll, ll>> a(n); // {V, S} - обратите внимание, V на первом месте
for (int i = 0; i < n; i++) {
cin >> a[i].second >> a[i].first;
}
vector<ll> c(m);
for (int i = 0; i < m; i++) {
cin >> c[i];
}
// Сортируем картины по убыванию V. Если V равны, по убыванию S.
sort(a.rbegin(), a.rend());
// Сортируем рамки по убыванию размера
sort(c.rbegin(), c.rend());
ll ans = 0;
ll frame_idx = 0; // Указатель на текущую (самую большую из доступных) рамку
// Проходим по картинам в порядке убывания их ценности (V)
for (int i = 0; i < n; i++) {
if (frame_idx < m && a[i].second <= c[frame_idx]) {
// Картина помещается в текущую рамку!
ans++;
frame_idx++; // Переходим к следующей (чуть меньшей) рамке
}
}
cout << ans << "\n";
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
solve();
return 0;
}