小 A 是一名热爱编程的初中生,最近他开发了一款石头剪刀布的电子游戏。在这款游戏中,玩家需要与电脑进行 N 轮对战。
每一轮,玩家和电脑的出招手势可能是如下三种其中之一:
r:石头(rock)s:剪刀(scissors)p:布(paper)判断输赢的方法,是众所周知的:石头战胜剪刀、剪刀战胜布、布战胜石头。
玩家的目标是:尽可能多地获得分数。在游戏中,玩家赢得每一轮后将获得对应分数:
为了让游戏更有挑战性,小A设计了一个规则:你不能在当前轮(第 i 轮)使用和第 i-K 轮相同的手势。 换句话说,手势不能在相隔 K 的回合中重复使用。
在前 K 轮中,你可以任意选择任何手势,不受限制。
给定电脑在每一轮的出招序列,请你计算出,在不违反规则的前提下,玩家最多可以获得多少总分?
第一行输入两个整数 N 和 K,分别表示对战轮数与限制间隔。
第二行三个整数 A、B、C,分别表示用石头、剪刀、布赢时获得的分数。
第三行一个长度为 N 的字符串,表示电脑在每一轮出的手势,该字符串中仅包含字符 r、s、p。
输出一个整数,表示玩家在这款游戏中最多能获得多少分。
5 2 8 7 6 rsrpr
27
7 1 100 10 1 ssssppr
211
30 5 325 234 123 rspsspspsrpspsppprpsprpssprpsr
4996
电脑的出招手势序列是:r s r p r,你可以按如下方式选择出招(避免与 i-K 重复):
总得分为:6 + 8 + 0 + 7 + 6 = 27。
对于 100\% 的数据,满足 2 \leq N \leq 10^5,1 \leq K \leq N - 1,1 \leq A, B, C \leq 10^4。
| 测试点 | 数据范围 |
|---|---|
| 1 \sim 7 | 1 \le N \le 10,1 \le K \le 10 |
| 8 \sim 10 | K=1 |
| 11 \sim 20 | 2 \leq N \leq 10^5,1 \leq K \leq N - 1 |