#include <bits/stdc++.h>
using namespace std;
const int MAX = 200010;
const long long MOD = (int)1e9 + 7;
const int INF = 1e9;
const long long LLINF = 0x3f3f3f3f3f3f3f3f;
const long double EPS = 1e-8;
long long tab[101][101][101];
string s;
vector<int> val;
long long dp(int l, int r, int qt) {
  if (l > r) return 0;
  if (tab[l][r][qt] != -1) return tab[l][r][qt];
  long long res = dp(l + 1, r, 1) + val[qt];
  for (int i = l + 1; i <= r; i++) {
    if (s[l] == s[i]) {
      res = max(res, dp(l + 1, i - 1, 1) + dp(i, r, qt + 1));
    }
  }
  return tab[l][r][qt] = res;
}
int32_t main() {
  memset(tab, -1, sizeof(tab));
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ;
  int n;
  cin >> n >> s;
  val.assign(n + 1, 0);
  for (int i = 1; i <= n; i++) {
    cin >> val[i];
  }
  cout << dp(0, n - 1, 1) << '\n';
  return 0;
}
