#include <bits/stdc++.h>
using namespace std;
long long dp[105][110][110];
long long a[110];
string s;
int n;
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]) return dp[l][r][k];
  dp[l][r][k] = max(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(i + 1, r - 1, 0) + dfs(l, i, k + 1));
  }
  return dp[l][r][k];
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> s;
  for (int i = 1; i <= n; ++i) {
    cin >> a[i];
  }
  cout << dfs(0, n - 1, 0) << endl;
  return 0;
}
