#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 36;
const int INF = 1e9 + 7;
long long a[N];
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long n, k;
  cin >> n >> k;
  for (int i(0); i < n; i++) {
    cin >> a[i];
  }
  string s;
  cin >> s;
  vector<int> o, r, w;
  for (int i(0); i < n; i++) {
    if (s[i] == 'O') {
      o.push_back(a[i]);
    }
    if (s[i] == 'R') {
      r.push_back(a[i]);
    }
    if (s[i] == 'W') {
      w.push_back(a[i]);
    }
  }
  if (k == 1 || (int)o.size() == 0 || ((int)r.size() + (int)w.size() == 0) ||
      (((int)o.size() + (int)r.size() < k) &&
       ((int)o.size() + (int)w.size() < k))) {
    cout << -1 << '\n';
    return 0;
  }
  sort(o.begin(), o.end());
  sort(r.begin(), r.end());
  sort(w.begin(), w.end());
  long long ansW = o[(int)o.size() - 1], ansR = o[(int)o.size() - 1];
  long long FW = 0, FR = 0;
  if ((int)w.size() > 0) {
    ansW += w[(int)w.size() - 1];
    w.pop_back();
    FW++;
  }
  if ((int)r.size() > 0) {
    ansR += r[(int)r.size() - 1];
    r.pop_back();
    FR++;
  }
  o.pop_back();
  k -= 2;
  vector<int> ro = r, wo = w;
  for (int i(0); i < (int)o.size(); i++) {
    ro.push_back(o[i]);
    wo.push_back(o[i]);
  }
  sort(ro.begin(), ro.end());
  sort(wo.begin(), wo.end());
  for (int i(0); i < k; i++) {
    if ((int)ro.size() - 1 - i >= 0) {
      ansR += ro[(int)ro.size() - 1 - i];
    } else {
      FR--;
    }
    if ((int)wo.size() - 1 - i >= 0) {
      ansW += wo[(int)wo.size() - 1 - i];
    } else {
      FW--;
    }
  }
  if (FW == 1 && FR == 1) {
    cout << max(ansW, ansR) << '\n';
    return 0;
  }
  if (FW == 1) {
    cout << ansW << '\n';
    return 0;
  }
  if (FR == 1) {
    cout << ansR << '\n';
    return 0;
  }
  cout << -1 << '\n';
  return 0;
}
