#include <bits/stdc++.h>
using namespace std;
namespace Fread {
const int SIZE = 16;
char buf[SIZE], *S, *T;
inline char getchar() {
if (S == T) {
T = (S = buf) + fread(buf, 1, SIZE, stdin);
if (S == T) return '\n';
}
return *S++;
}
}
namespace Fwrite {
const int SIZE = 65536;
char buf[SIZE], *S = buf, *T = buf + SIZE;
inline void flush() {
fwrite(buf, 1, S - buf, stdout);
S = buf;
}
inline void putchar(char CHARC) {
*S++ = CHARC;
if (S == T) flush();
}
struct NTR {
~ NTR() { flush(); }
} ztr;
}
#ifdef ONLINE_JUDGE
#define getchar Fread :: getchar
#define putchar Fwrite :: putchar
#endif
namespace Fastio {
struct Reader {
template<typename T>
Reader& operator >> (T& ANYX) {
register char CHARC = getchar();
register T FLAG = 1;
while (CHARC < '0' || CHARC > '9') {
if (CHARC == '-') FLAG = -1;
CHARC = getchar();
}
ANYX = 0;
while (CHARC >= '0' && CHARC <= '9') {
ANYX = (ANYX * 10 + (CHARC - '0'));
CHARC = getchar();
}
ANYX *= FLAG;
return *this;
}
Reader& operator >> (char& CHARC) {
CHARC = getchar();
while (CHARC == '\n' || CHARC == ' ') CHARC = getchar();
return *this;
}
Reader& operator >> (char* STRINGSTR) {
register int READLEN = 0;
register char CHARC = getchar();
while (CHARC == '\n' || CHARC == ' ') CHARC = getchar();
while (CHARC != '\n' && CHARC != ' ') {
STRINGSTR[READLEN++] = CHARC;
CHARC = getchar();
}
STRINGSTR[READLEN] = '\0';
return *this;
}
Reader(){}
} cin;
const char endl = '\n';
struct Writer {
template<typename T>
Writer& operator << (T ANYX) {
if (ANYX == 0) { putchar('0'); return *this; }
if (ANYX < 0) { putchar('-'); ANYX = -ANYX; }
static int STACKTOP[45];
int bufTOP = 0;
while (ANYX) { STACKTOP[++bufTOP] = ANYX % 10; ANYX /= 10; }
while (bufTOP) { putchar(STACKTOP[bufTOP] + '0'); --bufTOP; }
return *this;
}
Writer& operator << (char CHARC) {
putchar(CHARC);
return *this;
}
Writer& operator << (char* STRINGSTR) {
register int cur = 0;
while (STRINGSTR[cur]) putchar(STRINGSTR[cur++]);
return *this;
}
Writer& operator << (const char* STRINGSTR) {
register int cur = 0;
while (STRINGSTR[cur]) putchar(STRINGSTR[cur++]);
return *this;
}
Writer(){}
} cout;
}
#define cin Fastio :: cin
#define cout Fastio :: cout
#define endl Fastio :: endl
#define m second
#define v first
const int N=3e5+5;
#define int long long
int n,k,ans;
vector<int> c;
pair<int,int> a[N];
signed main() {
cin>>n>>k;
for(register int i=1;i<=n;++i) cin>>a[i].m>>a[i].v;
for(register int i=1;i<=k;++i) {
register int x;cin>>x;
c.push_back(x);
}
sort(a+1,a+n+1,greater<pair<int,int>>());
sort(c.begin(),c.end());
for(register int i=1;i<=n;++i) {
if(!k) break;
register auto j=lower_bound(c.begin(),c.end(),a[i].m);
if(j==c.end()) continue;
c.erase(j),--k;
ans+=a[i].v;
}
cout<<ans;
return 0;
}