#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const long long LL_INF = 0x3f3f3f3f3f3f3f3f;
const int maxn = 100 + 10;
const long long mod = 1e9 + 7;
string s;
long long a[maxn];
long long dp[maxn][maxn][maxn];
long long dfs(int l, int r, int k) {
  if (l > r) return 0;
  if (l == r) return a[k + 1];
  if (dp[l][r][k] != -1) return dp[l][r][k];
  dp[l][r][k] = dfs(l, r - 1, 0) + a[k + 1];
  for (int i = l; i < r; i++) {
    if (s[i] == s[r]) {
      dp[l][r][k] = max(dp[l][r][k], dfs(l, i, k + 1) + dfs(i + 1, r - 1, 0));
    }
  }
  return dp[l][r][k];
}
int main() {
  int n;
  scanf("%d", &n);
  cin >> s;
  for (int i = 1; i <= n; i++) {
    scanf("%I64d", &a[i]);
  }
  memset(dp, -1, sizeof(dp));
  printf("%I64d\n", dfs(0, n - 1, 0));
}
