/*
分析:
最长公共子序列。
这题做的有点儿小郁闷,一眼就看出来是求最长公共子序列的,
但脑卡的WA了几次,不就是这两天有事儿没有敲题么,至于么。。。
和求最长公共子序列一样,不过dp[i][l]表示的是得分,其它的
就不啰嗦了。。。
2012-11-30
*/
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
int n;
int dp[2][2011];
char str1[2011],str2[2011];
int len1,len2;
int val[200];
void init()
{
int i;
char str[2011];
memset(val,0,sizeof(val));
scanf("%s",str);
for(i=0;str[i];i++) scanf("%d",&val[str[i]]);
scanf("%s%s",str1,str2);
len1=strlen(str1);
len2=strlen(str2);
}
int get_dp()
{
int i,l;
int pre,now;
memset(dp,0,sizeof(dp));
for(i=1;i<=len1;i++)
{
now=i%2;
pre=1-now;
for(l=1;l<=len2;l++)
{
if(str1[i-1]==str2[l-1]) dp[now][l]=dp[pre][l-1]+val[str1[i-1]];
else dp[now][l]=dp[now][l-1]>dp[pre][l]?dp[now][l-1]:dp[pre][l];
}
}
return dp[len1%2][len2];
}
int main()
{
while(scanf("%d",&n)!=-1)
{
init();
printf("%d\n",get_dp());
}
return 0;
}