## https://yukicoder.me/problems/no/2964 import math MOD = 998244353 def main(): L, K = map(int , input().split()) S = input() T = input() A = list(map(int, input().split())) s_array = [ord(s) - ord("a") for s in S] t_array = [ord(s) - ord("a") for s in T] a_prob = [0] * 26 sum_a = sum(A) for i in range(26): a_prob[i] = (A[i] * pow(sum_a, MOD - 2, MOD)) % MOD def calc(new_dp, new_pm, new_pn, prob, base_value, answer_list): new_diff = new_pm - new_pn ans = prob * base_value ans %= MOD if abs(new_diff) == L: if new_diff > 0: answer_list[1] += ans answer_list[1] %= MOD else: answer_list[0] += ans answer_list[0] %= MOD else: new_key = (new_pn % L, new_diff) if new_key not in new_dp: new_dp[new_key] = 0 new_dp[new_key] += ans new_dp[new_key] %= MOD dp = {(0, 0): 1} answer_list = [0, 0] for _ in range(K): new_dp = {} for key, value in dp.items(): pn, diff = key pm = pn + diff if s_array[pn] == t_array[pm % L]: # 同じく進むパターン p0 = a_prob[s_array[pn]] calc(new_dp, pm + 1, pn + 1, p0, value, answer_list) p1 = 1 - p0 p1 %= MOD calc(new_dp, pm, pn, p1, value, answer_list) else: # 個別に勝つパターン p0 = a_prob[s_array[pn]] calc(new_dp, pm, pn + 1, p0, value, answer_list) p1 = a_prob[t_array[pm % L]] calc(new_dp, pm + 1, pn, p1, value, answer_list) p2 = (1 - p1 - p0) % MOD calc(new_dp, pm, pn, p2, value, answer_list) dp = new_dp print(answer_list[0], answer_list[1]) if __name__ == "__main__": main()