#include <bits/stdc++.h>
using namespace std;
long long n, m;
vector<long long> v1, v2, v3;
long long cache[101][101][101][2];
long long dp(long long pos, long long a, long long d, long long f) {
  if (pos == m) {
    if (f)
      if (a + d != n) return -1e18;
    return 0;
  }
  if (cache[pos][a][d][f] != -1) return cache[pos][a][d][f];
  long long ans = max(dp(pos + 1, a, d, f), v3[pos] + dp(pos + 1, a, d, f | 1));
  if (a != v1.size() && v3[pos] >= v1[a])
    ans = max(ans, dp(pos + 1, a + 1, d, f) + v3[pos] - v1[a]);
  if (d != v2.size() && v3[pos] > v2[d])
    ans = max(ans, dp(pos + 1, a, d + 1, f));
  return cache[pos][a][d][f] = ans;
}
int32_t main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  cin >> n >> m;
  for (long long i = 0; i < n; i++) {
    string s;
    long long a;
    cin >> s >> a;
    if (s[0] == 'A')
      v1.push_back(a);
    else
      v2.push_back(a);
  }
  for (long long i = 0; i < m; i++) {
    long long a;
    cin >> a;
    v3.push_back(a);
  }
  sort(v1.begin(), v1.end());
  sort(v2.begin(), v2.end());
  sort(v3.begin(), v3.end());
  memset(cache, -1, sizeof(cache));
  cout << dp(0, 0, 0, 0);
}
