{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE BinaryLiterals #-}
{-# LANGUAGE MultiWayIf #-}
{-# LANGUAGE NumDecimals #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TupleSections #-}

import Control.Applicative
import Control.Arrow
import Control.Monad
import Control.Monad.ST

import Data.Char
import Data.List
import Data.Maybe

import qualified Data.ByteString.Char8 as B

import Data.Array.ST.Safe
import Data.STRef

import Debug.Trace
import Text.Printf

readInt = readLn :: IO Int
readInteger = readLn :: IO Integer
readInts = map ( fst . fromJust . B.readInt ) . B.words <$> B.getLine
readIntegers = map ( fst . fromJust . B.readInteger ) . B.words <$> B.getLine

which a b f = if f then a else b
mp [ a, b ] = ( a, b )

modifyArray a i f = writeArray a i =<< f <$> readArray a i

main = do
	[ n, k ] <- readInts
	[ r, s, p ] <- readInts
	t <- getLine
	let
		f 'r' = p
		f 's' = r
		f 'p' = s
		ass = spread k $ map f t
	print $ sum $ map ( solve 1 ) ass

spread k as = runST $ do
	let
		n = length as
	res <- newArray ( 0, k - 1 ) [] :: ST s ( STArray s Int [Int] )
	forM_ ( zip as [ 0 .. ] ) $ \( a, i ) -> do
		modifyArray res ( i `mod` k ) ( a : )
	getElems res

solve c [a] = if odd c then a else 0
solve c (a1:a2:as) = r + solve c' (a2:as)
	where
		r = if odd c then a1 else 0
		c' = if a1 == a2 then succ c else 1