#include <bits/stdc++.h>
using namespace std;
long long s[300000];
char str[300000];
struct node {
  char c;
  long long cnt;
  long long s;
} tem;
int get_hash(long long s) {
  if (s < 0) s *= -7;
  return s % 100007;
}
vector<struct node> vec[100007];
void insert(long long &s, char c) {
  int hash, len, i;
  hash = get_hash(s);
  len = vec[hash].size();
  for (i = 0; i < len; i++) {
    if (vec[hash][i].c == c && vec[hash][i].s == s) {
      vec[hash][i].cnt++;
      break;
    }
  }
  if (i == len) {
    tem.cnt = 1;
    tem.c = c;
    tem.s = s;
    vec[hash].push_back(tem);
  }
}
long long find(long long s, char c) {
  int hash, len, i;
  hash = get_hash(s);
  len = vec[hash].size();
  for (i = 0; i < len; i++) {
    if (vec[hash][i].c == c && vec[hash][i].s == s) {
      return vec[hash][i].cnt;
    }
  }
  return 0;
}
int main() {
  int i, j, k, n, m, len;
  long long sum, cnt;
  int a[30];
  while (scanf("%d", &a[0]) != EOF) {
    sum = 0;
    for (i = 0; i < 100007; i++) vec[i].clear();
    for (i = 1; i < 26; i++) {
      scanf("%d", &a[i]);
    }
    scanf("%s", str);
    len = strlen(str);
    s[0] = a[str[0] - 'a'];
    insert(s[0], str[0]);
    for (i = 1; i < len; i++) {
      s[i] = s[i - 1] + a[str[i] - 'a'];
      cnt = find(s[i - 1], str[i]);
      sum += cnt;
      insert(s[i], str[i]);
    }
    printf("%I64d\n", sum);
  }
}
