#include <bits/stdc++.h>
using namespace std;
const int MAXN = 150 + 6.66;
int dp[MAXN][MAXN][MAXN];
int rm[MAXN][MAXN];
int ans[MAXN][MAXN];
int C[MAXN];
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  int n;
  cin >> n;
  for (int i = 1; i <= n; i++) cin >> C[i];
  string str;
  cin >> str;
  int mx = 0;
  for (int r = 0; r < n; r++) {
    for (int l = 0; l < n; l++) {
      for (int len = 0; len <= n; len++) dp[l][r][len] = -1;
      if (l <= r) rm[l][r] = -1;
    }
  }
  for (int r = 0; r < n; r++)
    for (int l = r; l >= 0; l--) {
      if (r == l)
        dp[l][r][1] = 0;
      else {
        dp[l][r][1] = max({dp[l][r][1], rm[l + 1][r], rm[l][r - 1]});
        for (int i = l + 1; i < r; i++)
          dp[l][r][1] = max(dp[l][r][1], rm[l][i - 1] >= 0 && rm[i + 1][r] >= 0
                                             ? rm[l][i - 1] + rm[i + 1][r]
                                             : -1);
      }
      rm[l][r] = max(rm[l][r],
                     dp[l][r][1] >= 0 && C[1] >= 0 ? dp[l][r][1] + C[1] : -1);
      for (int len = 2; len <= r - l + 1; len++) {
        if (str[r] == str[l])
          dp[l][r][len] = (r - l + 1 > 2 ? dp[l + 1][r - 1][len - 2] : 0);
        for (int mid = l; mid < r; mid++)
          dp[l][r][len] = max(
              {dp[l][r][len],
               dp[l][mid][len] >= 0 && rm[mid + 1][r] >= 0 && mid - l + 1 >= len
                   ? dp[l][mid][len] + rm[mid + 1][r]
                   : -1,
               dp[mid + 1][r][len] >= 0 && rm[l][mid] >= 0 && r - mid >= len
                   ? dp[mid + 1][r][len] + rm[l][mid]
                   : -1});
        if (C[len] >= 0) {
          rm[l][r] =
              max(rm[l][r], dp[l][r][len] >= 0 ? C[len] + dp[l][r][len] : -1);
        }
      }
      dp[l][r][0] = rm[l][r];
      ans[l][r] = max(rm[l][r], 0);
      for (int i = l; i < r; i++)
        ans[l][r] = max(ans[l][r], ans[l][i] + ans[i + 1][r]);
    }
  cout << ans[0][n - 1] << endl;
  return 0;
}
