#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define int ll
using ii = pair<int, int>;
using iii = pair<ii, int>;
#pragma GCC optimize("O3")
constexpr int MAXN = 200'000 + 5;
constexpr int INF = 1e18 + 5;
vector<ii> monsters;
vector<int> mines;
// [left_yes][right_yes];
int dp[2][2];
signed main() {
ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
int N, K; cin >> N >> K;
monsters.resize(N);
dp[0][0] = dp[0][1] = dp[1][0] = dp[1][1] = INF;
dp[0][0] = 0;
mines.resize(K);
for (int i = 0; i < N; ++i) cin >> monsters[i].first >> monsters[i].second;
for (int i = 0; i < K; ++i) cin >> mines[i];
K++;
mines.emplace_back(INF);
sort(monsters.begin(), monsters.end());
sort(mines.begin(), mines.end());
int ptr = 0;
for (int i = 0; i < K; ++i) {
while (ptr < N && monsters[ptr].first <= mines[i]) {
int left = i == 0 ? -INF : mines[i-1];
int right = mines[i];
int ldist = abs(left - monsters[ptr].first);
int rdist = abs(right - monsters[ptr].first);
int healt = monsters[ptr].second;
int newDp[2][2];
newDp[0][0] = dp[0][0] + healt;
newDp[1][0] = min({dp[0][0] + ldist + 1, dp[1][0] + ldist, dp[1][0] + healt});
newDp[0][1] = min({dp[0][0] + rdist + 1, dp[0][1] + rdist, dp[0][1] + healt});
newDp[1][1] = min({dp[1][1] + healt,
dp[1][1] + ldist,
dp[1][1] + rdist,
dp[0][1] + ldist + 1,
dp[1][0] + rdist + 1});
memcpy(dp, newDp, sizeof(dp));
ptr++;
}
int newDp[2][2];
newDp[0][0] = min(dp[0][0], dp[1][0]);
newDp[1][0] = min(dp[0][1], dp[1][1]);
newDp[0][1] = INF;
newDp[1][1] = INF;
memcpy(dp, newDp, sizeof(dp));
}
int ans = min({dp[0][0], dp[0][1], dp[1][0], dp[1][1]});
cout << ans;
}