#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const long long LLINF = 0x3f3f3f3f3f3f3f3f;
const int MAXN = 105;
long long dp[MAXN][MAXN][MAXN];
int a[MAXN], n;
char s[MAXN];
long long dfs(int l, int r, int k) {
  if (~dp[l][r][k]) return dp[l][r][k];
  if (l > r) return dp[l][r][k] = 0;
  if (l == r) return dp[l][r][k] = a[k];
  long long temp = dfs(l + 1, r, 1) + a[k];
  for (int i = l + 1; i <= r; i++) {
    if (s[l] == s[i])
      temp = (temp) > (dfs(i, r, k + 1) + dfs(l + 1, i - 1, 1))
                 ? (temp)
                 : (dfs(i, r, k + 1) + dfs(l + 1, i - 1, 1));
  }
  return dp[l][r][k] = temp;
}
int main() {
  memset(dp, -1, sizeof(dp));
  scanf("%d", &n);
  scanf("%s", s + 1);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  printf("%lld\n", dfs(1, n, 1));
  return 0;
}
