def compute_runs(s): if not s: return [] runs = [] prev = s[0] runs.append(prev) for c in s[1:]: if c != prev: runs.append(c) prev = c return runs def main(): import sys input = sys.stdin.read().split() idx = 0 S_alpha = list(map(int, input[idx:idx+26])) idx += 26 T = input[idx].strip() idx += 1 runs_T = compute_runs(T) k = len(runs_T) if k == 0: print(0) return count_runs_T = {} for c in runs_T: count_runs_T[c] = count_runs_T.get(c, 0) + 1 possible = True for c in runs_T: if S_alpha[ord(c) - ord('a')] < count_runs_T[c]: possible = False break if not possible: print(0) return product = 1 for c in count_runs_T: m = count_runs_T[c] available = S_alpha[ord(c) - ord('a')] q, r = divmod(available, m) if q == 0: product = 0 break contribution = (pow(q, m - r) * pow(q + 1, r)) if r != 0 else pow(q, m) product *= contribution if product > (1 << 62): print("hel") return print(product) if __name__ == "__main__": main()