unittest
{
	assert( [ "5 2", "8 7 6", "rsrpr" ].parse.expand.solve == 27 );
	assert( [ "7 1", "100 10 1", "ssssppr" ].parse.expand.solve == 211 );
	assert( [ "30 5", "325 234 123", "rspsspspsrpspsppprpsprpssprpsr" ].parse.expand.solve == 4996 );
}



import std.algorithm;
import std.conv;
import std.range;
import std.stdio;
import std.typecons;

void main()
{
	stdin.byLineCopy.parse.expand.solve.writeln;
}

auto parse( Range )( Range input )
if( isInputRange!Range && is( ElementType!Range == string ) )
{
	auto nk = input.front.split.to!( long[] );
	input.popFront;
	auto rsp = input.front.split.to!( long[] );
	input.popFront;
	auto t = input.front.to!( dchar[] );
	return tuple( nk[ 1 ], rsp[ 0 ], rsp[ 1 ], rsp[ 2 ], t );
}

auto solve( long k, long r, long s, long p, dchar[] t )
{
	// dp[ i回目 / k ][ i回目 % k ][ グー/チョキ/パーのどれを出したか ] = i % k 回目ごとの最大スコア
	auto dp = new long[][][]( 1 + ( t.length + k - 1 ) / k, k, 3 );
	auto i = 0L;
	foreach( a; 1L .. dp.length.signed )
	{
		foreach( b; 0L .. dp[ a ].length.signed )
		{
			if( t.length <= i )
			{
				dp[ a ][ b ][] = dp[ a - 1 ][ b ][];
				continue;
			}
			
			final switch( t[ i ] )
			{
				case 'r':
					dp[ a ][ b ][ 0 ] = max( dp[ a - 1 ][ b ][ 1 ], dp[ a - 1 ][ b ][ 2 ] );
					dp[ a ][ b ][ 1 ] = max( dp[ a - 1 ][ b ][ 0 ], dp[ a - 1 ][ b ][ 2 ] );
					dp[ a ][ b ][ 2 ] = max( dp[ a - 1 ][ b ][ 0 ], dp[ a - 1 ][ b ][ 1 ] ) + p;
					break;
				
				case 's':
					dp[ a ][ b ][ 0 ] = max( dp[ a - 1 ][ b ][ 1 ], dp[ a - 1 ][ b ][ 2 ] ) + r;
					dp[ a ][ b ][ 1 ] = max( dp[ a - 1 ][ b ][ 0 ], dp[ a - 1 ][ b ][ 2 ] );
					dp[ a ][ b ][ 2 ] = max( dp[ a - 1 ][ b ][ 0 ], dp[ a - 1 ][ b ][ 1 ] );
					break;
				
				case 'p':
					dp[ a ][ b ][ 0 ] = max( dp[ a - 1 ][ b ][ 1 ], dp[ a - 1 ][ b ][ 2 ] );
					dp[ a ][ b ][ 1 ] = max( dp[ a - 1 ][ b ][ 0 ], dp[ a - 1 ][ b ][ 2 ] ) + s;
					dp[ a ][ b ][ 2 ] = max( dp[ a - 1 ][ b ][ 0 ], dp[ a - 1 ][ b ][ 1 ] );
					break;
			}
			i++;
		}
	}
	
	// k 単位で分割して計算していたスコアを合計
	auto ans = 0L;
	foreach( b; 0L .. dp[ $ - 1 ].length.signed )
	{
		ans += dp[ $ - 1 ][ b ].reduce!max;
	}
	return ans;
}
