#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
long long a[110], dp[110][110][110];
char num[110];
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];
  long long &ans = dp[l][r][k] = dfs(l, r - 1, 0) + a[k + 1];
  for (int i = l; i < r; i++) {
    if (num[i] == num[r])
      ans = max(dfs(l, i, k + 1) + dfs(i + 1, r - 1, 0), ans);
  }
  return ans;
}
int main(int argc, char const *argv[]) {
  long long n;
  memset(dp, -1, sizeof(dp));
  scanf("%lld%s", &n, num + 1);
  for (int i = 1; i <= n; i++) cin >> a[i];
  cout << dfs(1, n, 0);
  return 0;
}
