#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn = 500000+100;
char x[maxn];
char y[maxn];
int knext[maxn];
int extend1[maxn];
int extend2[maxn];
ll sum[maxn];
void pre_ekmp(char x[], int m, int knext[]){
knext[0] = m;
int j = 0;
while(j+1<m&&x[j]==x[j+1])j++;
knext[1] = j;
int k = 1;
for(int i = 2;i<m;++i){
int p = knext[k] + k -1;
int L = knext[i-k];
if(i+L<p+1)knext[i] = L;
else{
j = max(0,p-i+1);
while(i+j<m&&x[i+j]==x[j])j++;
knext[i] = j;
k = i;
}
}
}
void ekmp(char x[], int m,char y[], int n, int knext[], int extend[]){
pre_ekmp(x,m,knext);
int j = 0;
while(j<n&&j<m&&x[j]==y[j])j++;
extend[0] = j;
int k = 0;
for(int i = 1;i<n;++i){
int p = extend[k]+k-1;
int L = knext[i-k];
if(i+L<p+1)extend[i] = L;
else{
j = max(0,p-i+1);
while(i+j<n&&j<m&&y[i+j]==x[j])j++;
extend[i] = j;
k = i;
}
}
}
int a[30];
int main(){
int n;
int t;
scanf("%d",&t);
while(t--){
for(int i = 0;i<26;++i) {
scanf("%d", &a[i]);
}
scanf("%s",x);
int lenx = strlen(x);
for(int i = 0;i<lenx;++i){
y[i] = x[lenx-i-1];
}
sum[0] = a[x[0]-'a'];
for(int i = 1;i<lenx;++i){
sum[i] = sum[i-1]+a[x[i]-'a'];
}
ekmp(x,lenx,y,lenx,knext,extend1);
ekmp(y,lenx,x,lenx,knext,extend2);
ll maxs = -1e18;
// printf("%s\n%s\n",x,y);
// for(int i = 0;i<lenx;++i){
// cout<<extend1[i]<<":";
// }
// cout<<endl;
// for(int i = 0;i<lenx;++i){
// cout<<extend2[i]<<":";
// }
// cout<<endl;
for(int i = 1;i<lenx;++i){
ll res = 0;
if(extend1[i]+i==lenx){
res+=sum[lenx - i-1];
}
if(extend2[lenx-i]+lenx-i==lenx){
res+=sum[lenx-1]-sum[lenx-i-1];
}
// cout<<i<<":"<<res<<endl;
maxs = max(maxs,res);
}
cout<<maxs<<endl;
}
}