#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
typedef unsigned long long ULL;
const int N = 500010, base = 13331;
ULL hl[N],hr[N],p[N];
char str[N];
int a[30],s[N];
ULL get(ULL h[],int l,int r)
{
return h[r]-h[l-1]*p[r-l+1];
}
int main()
{
p[0]=1;
for(int i=1;i<=500000;i++)
p[i]=p[i-1]*base;
int T;cin>>T;
while(T--)
{
for(int i=1;i<=26;i++) cin>>a[i];
cin>>(str+1);
int n=strlen(str+1);
for(int i=1,j=n;i<=n;i++,j--)
{
s[i]=s[i-1]+a[str[i]-'a'+1];
hl[i]=hl[i-1]*base+str[i]-'a'+1;
hr[i]=hr[i-1]*base+str[j]-'a'+1;
}
int ans=-1e9;
for(int len=1;len<=n-1;len++)
{
int sum=0;
if(get(hl,1,len)==get(hr,n-len+1,n))
sum+=s[len];
if(get(hl,len+1,n)==get(hr,1,n-len))
sum+=s[n]-s[len];
ans=max(ans,sum);
}
cout<<ans<<endl;
}
return 0;
}