#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define ll long long
#ifdef LOCAL
#include "algo/debug.h"
#else
#define debug(...) 42
#endif
template <class T> bool ckmax(T &a, T b) { return a < b ? (a = b, true) : false; }
template <class T> bool ckmin(T &a, T b) { return a > b ? (a = b, true) : false; }
const int MAXN = 2e5 + 5;
int a[MAXN], b[MAXN];
int n, k;
pair<int, int> st[MAXN * 4];
void upd(int pos, int val) {
int l = 1, r = k, id = 1;
while (l < r) {
int mid = (l + r) >> 1;
if (pos <= mid) r = mid, id = id << 1;
else l = mid + 1, id = id << 1 | 1;
}
st[id] = {val, 1};
while (id > 1) {
id >>= 1;
st[id].fi = min(st[id << 1].fi, st[id << 1 | 1].fi);
st[id].se = st[id << 1].se ^ st[id << 1 | 1].se;
}
}
void build(int id = 1, int l = 1, int r = k) {
st[id] = {1e9, 0};
if (l == r) return;
int mid = (l + r) >> 1;
build(id << 1, l, mid);
build(id << 1 | 1, mid + 1, r);
}
int get(int id, int l, int r, int u, int v) {
if (v < l || r < u) return 0;
if (u <= l && r <= v) return st[id].se;
int mid = (l + r) >> 1;
return get(id << 1, l, mid, u, v) ^ get(id << 1 | 1, mid + 1, r, u, v);
}
int walk(int id, int l, int r, int v) {
if (st[id].fi > v) return 0;
if (l == r) return l;
int mid = (l + r) >> 1;
int p = walk(id << 1 | 1, mid + 1, r, v);
if (p) return p;
return walk(id << 1, l, mid, v);
}
int main() {
#define NAME ""
if (fopen(NAME".inp", "r")) {
freopen(NAME".inp", "r", stdin);
freopen(NAME".out", "w", stdout);
}
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> k;
vector<pair<int, int>> v;
ll ans = 0;
for (int i = 1; i <= n; i++) {
cin >> a[i] >> b[i];
if (a[i] == b[i]) {
ans += a[i];
continue;
}
v.emplace_back(min(a[i], b[i]), i);
}
for (int i = 1, x; i <= k; i++) {
cin >> x;
v.emplace_back(x, i + n);
}
build();
sort(v.begin(), v.end(), greater<pair<int, int>>());
for (auto [mn, id] : v) {
if (id > n) upd(id - n, mn);
else {
int mx = max(a[id], b[id]);
int pos = walk(1, 1, k, mx - 1);
if (pos != 0) {
a[id] = mx;
b[id] = mn;
}
if (get(1, 1, k, pos + 1, k)) swap(a[id], b[id]);
ans += a[id];
}
}
cout << ans << '\n';
return 0;
}