#include <bits/stdc++.h>
using namespace std;
const long long inf = 1LL << 60;
int n;
string s;
long long cost[110];
long long best[110];
long long dp[110][110][110];
bool memo[110][110][110];
long long f(int x, int y, int z) {
  if (y > z) return 0;
  if (y == z) return best[x];
  if (memo[x][y][z]) return dp[x][y][z];
  long long ans = cost[x] + f(1, y + 1, z);
  for (int i = y + 1; i <= z; i++) {
    if (s[y] == s[i]) {
      ans = max(ans, f(1, y + 1, i - 1) + f(x + 1, i, z));
    }
  }
  dp[x][y][z] = ans;
  memo[x][y][z] = 1;
  return ans;
}
int main() {
  cin.tie(0);
  ios_base::sync_with_stdio(false);
  cin >> n >> s;
  for (int i = 1; i <= int(n); i++) {
    long long x;
    cin >> x;
    cost[i] = x;
  }
  best[1] = cost[1];
  for (int i = 2; i <= n; i++) {
    long long maxi = cost[i];
    for (int j = 1; j < i; j++) {
      maxi = max(maxi, best[j] + best[i - j]);
    }
    best[i] = maxi;
  }
  cout << f(1, 0, n - 1) << endl;
}
