//题意:给定一行字符串每个字符有自己对应的得分,然后接下来的两个串让你求出最长公共子序列的变形,什么变形呢,就是在泥鳅最长公共子序列的时候每次是给长度+1,而这里不是+1是加上相应的字符代表的分数,求的最高分数
//思路:利用求最长公共子序列的方式将最后+1改为价对应的分数
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
char p[2005], q[2005],r[2005];
int score[30];
int dp[2005][2005];
int main(){
int t;
while(scanf("%d", &t) != EOF){
memset(dp, 0, sizeof(int));
scanf("%s", p);
for(int i = 0; i < t; i++){
scanf("%d", &score[p[i]-'a']);
}
scanf("%s%s",q, r);
int len1 = strlen(q);
int len2 = strlen(r);
for(int i = 1; i <= len1; i++){
for(int j = 1; j <= len2; j++){
if(q[i-1] == r[j-1])
dp[i][j] = dp[i-1][j-1] + score[q[i-1]-'a'];
else
dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
}
}
cout << dp[len1][len2] << endl;
}
return 0;
}