#include<bits/stdc++.h> using namespace std; struct Node{ int M, V; friend bool operator < (const Node n1, const Node n2){ return n1.V < n2.V; } }; bool cmp(Node n1, Node n2){ return n1.M < n2.M; } int main(){ int N, K; while(cin >> N >> K){ Node arr[N]; for(int i = 0; i < N; i++)cin >> arr[i].M >> arr[i].V; sort(arr, arr+N, cmp); long long pkg[K]; for(int i = 0; i < K; i++) cin >> pkg[i]; sort(pkg, pkg+K); priority_queue<Node> pq; long long ans = 0; int index = 0; for(int i = 0; i < K; i++){ while(index < N && arr[index].M <= pkg[i]){ pq.push(arr[index]); index++; } if(!pq.empty()){ Node n = pq.top(); pq.pop(); ans += n.V; } } cout << ans << endl; } }