#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-8;
const double pi = acos(-1.0);
int dblcmp(double d) {
  if (fabs(d) < eps) return 0;
  return d > eps ? 1 : -1;
}
long long dp[155][155][155];
bool g[155][155][155];
long long val[155] = {0};
char s[155];
long long getdp(int l, int r, int k) {
  if (l > r) return val[k];
  if (g[l][r][k]) return dp[l][r][k];
  long long ans = -100000000000000LL;
  ;
  if (k) ans = max(ans, val[k] + getdp(l, r, 0));
  if (s[l] == s[r]) {
    if (l == r) {
      ans = max(ans, getdp(l + 1, r - 1, k + 1));
    } else {
      ans = max(ans, getdp(l + 1, r - 1, k + 2));
    }
  }
  int i;
  for (i = l; i < r; i++) {
    ans = max(ans, getdp(l, i, 0) + getdp(i + 1, r, k));
    ans = max(ans, getdp(l, i, k) + getdp(i + 1, r, 0));
  }
  g[l][r][k] = 1;
  return dp[l][r][k] = ans;
}
long long d[155];
int main() {
  int i, j, k, l;
  cin >> l;
  for (i = 0; i < l; i++) {
    cin >> val[i + 1];
    if (val[i + 1] == -1) val[i + 1] = -100000000000000LL;
  }
  cin >> s;
  memset((g), 0, sizeof(g));
  for (i = 0; i < 155; i++)
    for (j = 0; j < 155; j++)
      for (k = 0; k < 155; k++) dp[i][j][k] = -10000000000000LL;
  for (i = 0; i < 155; i++) d[i] = -10000000000000LL;
  for (i = 0; i < l; i++) {
    d[i] = getdp(0, i, 0);
    if (i)
      d[i] = max(d[i], d[i - 1]);
    else
      d[i] = max(d[i], 0LL);
    for (j = 0; j < i; j++)
      if (d[j] >= 0) {
        if (getdp(j + 1, i, 0) >= 0)
          d[i] = max(d[i], d[j] + getdp(j + 1, i, 0));
      }
  }
  cout << d[l - 1] << endl;
  return 0;
}
