#include <bits/stdc++.h>   using namespace std;   int main() {     int n, m;     scanf( %d %d , &n, &m);     vector<int> att, def, my(m);     for (int i = 0; i < n; i++) {       char a, b, c;       int s;       scanf(  %c%c%c %d , &a, &b, &c, &s);       if (a ==  A )         att.push_back(s);       else         def.push_back(s);     }     for (int i = 0; i < m; i++) {       scanf( %d , &my[i]);     }     sort(att.begin(), att.end());     sort(def.begin(), def.end());     sort(my.begin(), my.end());     int res = 0;     vector<int> used(m, 0);     int pres = 0;     int cm = 0;     for (int i = 0; i < def.size(); i++) {       while (my[cm] <= def[i] || used[cm]) {         cm++;         if (cm >= m) {           pres = -1023456789;           break;         }       }       if (cm < m) {         used[cm] = 1;       } else         break;     }     if (pres > -1023456789) {       cm = 0;       for (int i = 0; i < att.size(); i++) {         while (my[cm] < att[i] || used[cm]) {           cm++;           if (cm >= m) {             pres = -1023456789;             break;           }         }         if (cm < m) {           used[cm] = 1;           pres += my[cm] - att[i];         } else           break;       }     }     if (pres > -1023456789) {       for (int i = 0; i < m; i++)         if (!used[i]) pres += my[i];     }     res = max(res, pres);     for (int i = 1; i <= min(m, (int)(att.size())); i++) {       int suc = 0;       for (int j = 0; j < i; j++) {         if (my[m - i + j] >= att[j]) {           suc += my[m - i + j] - att[j];         } else           suc = -1023456789;       }       res = max(res, suc);     }     printf( %d n , res);     return 0;   }   