#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <typeinfo>
#include <utility>
#include <valarray>
#include <vector>
#include <climits>
#include <cstring>

#define rep(i, m, n) for(int i=int(m);i<int(n);i++)
#define all(c) begin(c),end(c)

template<typename T1, typename T2>
inline void chmin(T1 &a, T2 b) { if (a > b) a = b; }

template<typename T1, typename T2>
inline void chmax(T1 &a, T2 b) { if (a < b) a = b; }

typedef long long int ll;
using ll = long long int;
using ull = long long unsigned int;
using Int = long long int;
using namespace std;
#define INF (1 << 30) - 1
#define INFl (ll)5e15
#define DEBUG 0
#define dump(x)  cerr << #x << " = " << (x) << endl
#define MOD 1000000007


//edit
class Solve {
public:
    Int N, K;
    Int R, S, P;
    string T;
    vector<Int> score;
    vector<Int> t;

    Int calc(Int m) {
        // % K == m を求める

        vector<Int> tt;
//        vector<Int> ss;
        for (int i = m; i < N; i += K) {
            tt.push_back(t[i]);
//            ss.push_back(score[i]);
        }

//        vector<vector<Int>> dp(ss.size() + 1, vector<Int>(3));
//        for (int i = 0; i + 1 < dp.size(); ++i) {
//            for (int j = 0; j < 3; ++j) {
//                for(int k = 0; k < 3; ++k){
//
//                }
//            }
//        }
        vector<pair<Int, Int>> rl;
        for (int i = 0; i < tt.size(); ++i) {
            if (rl.size() == 0 || rl.back().first != tt[i]) {
                rl.push_back(make_pair(tt[i], 1));
            } else {
                rl.back().second++;
            }
        }

        Int ret = 0;
        for (auto e : rl) {
            ret += (e.second + 1) / 2 * score[e.first];
        }

        return ret;
    }


    void solve() {
        cin >> N >> K >> R >> S >> P >> T;
        score = {P, R, S, P};

        for (auto e : T) {
            if (e == 'r') t.push_back(0);
            else if (e == 's') t.push_back(1);
            else t.push_back(2);
        }

        Int ans = 0;
        for (int i = 0; i < K; ++i) {
            Int tmp = calc(i);
            ans += tmp;
        }
        cout << ans << endl;

//        vector<vector<Int>> dp(N, vector<Int>(3)); // r -> s -> p

//        for (int i = 0; i < N; ++i) {
//            for (int j = 0; j < 3; ++j) {
//                if (i < K) {
//                    if (i == 0) {
//                        if ((j + 3 - t[i]) % 3 == 1) {
//                            dp[i][j] = score[j];
//                        }
//                    } else {
//                        if ((j + 3 - t[i]) % 3 == 1) {
//                            for (int k = 0; k < 3; ++k) {
//                                chmax(dp[i][j], dp[i - 1][k] + score[j]);
//                            }
//                        } else {
//                            for (int k = 0; k < 3; ++k) {
//                                chmax(dp[i][j], dp[i - 1][k] + score[j]);
//                            }
//                        }
//                    }
//                } else {
//                    for (int k = 0; k < 3; ++k) {
//
//                    }
//                }
//            }
//        }


    }
};


int main() {
    cin.tie(0);
    ios::sync_with_stdio(false);
    cout << fixed << setprecision(10);

    Solve().solve();


    return 0;
}


Measured memory_bytes: 4148