#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 200;
const int inf = 0x3f3f3f3f;
struct node {
  long long a;
  char s;
} a[maxn];
int main() {
  int n, k, m = 0;
  long long tot = 0;
  scanf("%d %d", &n, &k);
  for (int i = 0; i < n; i++) scanf("%lld", &a[i].a);
  getchar();
  char be;
  multiset<long long> st;
  for (int i = 0; i < n; i++) scanf("%c", &a[i].s);
  be = a[0].s;
  for (int i = 0; i < n; i++) {
    if (be == a[i].s)
      st.insert(a[i].a);
    else {
      multiset<long long>::reverse_iterator it;
      int f = 0;
      for (it = st.rbegin(); it != st.rend(); it++) {
        tot += *it;
        f++;
        if (f == k) break;
      }
      st.clear();
      st.insert(a[i].a);
      be = a[i].s;
    }
    if (i == n - 1) {
      multiset<long long>::reverse_iterator it;
      int f = 0;
      for (it = st.rbegin(); it != st.rend(); it++) {
        tot += *it;
        f++;
        if (f == k) break;
      }
      st.clear();
    }
  }
  printf("%lld\n", tot);
}
