#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
const int maxn = 205;
long long n;
long long a[maxn];
char s[maxn];
long long dp[maxn][maxn][maxn];
long long DP(int bg, int ed, int prefix) {
  if (ed - bg + 1 <= 0) return 0;
  if (ed - bg + 1 == 1) return a[prefix];
  long long &ret = dp[bg][ed][prefix];
  if (ret > 0) return ret;
  ret = a[prefix] + DP(bg + 1, ed, 1);
  for (int i = bg + 1; i <= ed; i++) {
    if (s[bg] == s[i]) {
      ret = max(ret, DP(bg + 1, i - 1, 1) + DP(i, ed, prefix + 1));
    }
  }
  return ret;
}
int main() {
  cin >> n;
  cin >> (s + 1);
  for (int i = 1; i <= n; i++) cin >> a[i];
  memset(dp, 0, sizeof(dp));
  long long ans = DP(1, n, 1);
  cout << ans << endl;
  return 0;
}
