#include <bits/stdc++.h>
using namespace std;
inline int ni() {
  int a;
  scanf("%d", &a);
  return a;
}
inline double nf() {
  double a;
  scanf("%lf", &a);
  return a;
}
template <class T>
void out(T a, T b) {
  bool first = true;
  for (T i = a; i != b; i++) {
    if (!first) printf(" ");
    first = false;
    cout << *i;
  }
  puts("");
}
template <class T>
void outl(T a, T b) {
  for (T i = a; i != b; i++) cout << *i << "\n";
}
int n, m;
string s;
vector<long long> a, d;
vector<long long> g, cg, ca, cgg;
long long val;
long long best, ans;
int main() {
  cin >> n >> m;
  for (int i = 0; i < (int)(n); i++) {
    cin >> s;
    cin >> val;
    if (s[0] == 'A')
      a.push_back(val);
    else
      d.push_back(val);
  }
  g.resize(m);
  for (int i = 0; i < (int)(m); i++) cin >> g[i];
  sort((a).begin(), (a).end());
  sort((d).begin(), (d).end());
  sort((g).begin(), (g).end());
  for (int i = 0; i < (int)(((int)(a).size()) + 1); i++) {
    ans = 0;
    cg = g;
    if (i > ((int)(cg).size())) continue;
    for (int j = 0; j < (int)(i); j++) {
      if (cg.back() >= a[i - j - 1]) {
        ans += cg.back() - a[i - j - 1];
        cg.pop_back();
      } else {
        break;
      }
    }
    best = max(best, ans);
  }
  ans = 0;
  bool flag = true;
  for (int i = 0; i < (int)(((int)(d).size())); i++) {
    vector<long long>::iterator it = upper_bound(g.begin(), g.end(), d[i]);
    if (it != g.end()) {
      g.erase(it);
    } else {
      flag = false;
      break;
    }
  }
  if (flag) {
    for (int i = 0; i < (int)(((int)(a).size()) + 1); i++) {
      ans = 0;
      cg = g;
      if (i > ((int)(cg).size())) continue;
      bool ff = true;
      for (int j = 0; j < (int)(i); j++) {
        if (cg.back() >= a[i - j - 1]) {
          ans += cg.back() - a[i - j - 1];
          cg.pop_back();
        } else {
          ff = false;
          break;
        }
      }
      if (i == ((int)(a).size()) && ff) {
        for (int k = 0; k < (int)(((int)(cg).size())); k++) ans += cg[k];
      }
      best = max(best, ans);
    }
    best = max(best, ans);
  }
  cout << best << endl;
}
