#include <bits/stdc++.h>
using namespace std;
char s[160];
int best[160][160], full[160][160], t[160][160][160], c[160], n;
int main() {
  memset(best, 0, sizeof(best));
  memset(full, -1, sizeof(full));
  memset(t, -1, sizeof(t));
  scanf("%d", &n);
  for (int i = 0; i < 160; ++i)
    for (int j = 0; j < 160; ++j) t[i][j][0] = 0;
  for (int i = 1; i <= n; ++i) scanf("%d", &c[i]);
  scanf("%s", s);
  for (int len = 1; len <= n; ++len) {
    for (int l = 0; l + len <= n; ++l) {
      int r = l + len - 1;
      if (l == r) {
        if (c[1] == -1) {
          best[l][r] = 0;
          full[l][r] = -1;
          t[l][r][0] = -1;
          t[l][r][1] = 0;
        } else {
          best[l][r] = c[1];
          full[l][r] = c[1];
          t[l][r][0] = c[1];
          t[l][r][1] = 0;
        }
      } else {
        t[l][r][1] = max(t[l][r][1], max(full[l][r - 1], full[l + 1][r]));
        for (int m = l + 1; m < r; ++m)
          if (full[l][m - 1] != -1 && full[m + 1][r] != -1)
            t[l][r][1] = max(t[l][r][1], full[l][m - 1] + full[m + 1][r]);
        for (int i = 2; i <= len; ++i) {
          for (int m = l + 1; m <= r; ++m) {
            if (full[l][m - 1] != -1 && t[m][r][i] != -1)
              t[l][r][i] = max(t[l][r][i], full[l][m - 1] + t[m][r][i]);
          }
          for (int m = l; m < r; ++m) {
            if (full[m + 1][r] != -1 && t[l][m][i] != -1)
              t[l][r][i] = max(t[l][r][i], full[m + 1][r] + t[l][m][i]);
          }
          if (i > 1 && s[l] == s[r]) {
            t[l][r][i] = max(t[l][r][i], t[l + 1][r - 1][i - 2]);
          }
        }
        for (int i = 1; i <= len; ++i)
          if (c[i] != -1 && t[l][r][i] != -1)
            full[l][r] = max(full[l][r], c[i] + t[l][r][i]);
        t[l][r][0] = full[l][r];
        best[l][r] = max(best[l][r], full[l][r]);
        for (int m = l; m < r; ++m)
          best[l][r] = max(best[l][r], best[l][m] + best[m + 1][r]);
      }
    }
  }
  printf("%d\n", best[0][n - 1]);
  return 0;
}
