#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void read(T& x) {
  bool fu = 0;
  char c;
  for (c = getchar(); c <= 32; c = getchar())
    ;
  if (c == '-') fu = 1, c = getchar();
  for (x = 0; c > 32; c = getchar()) x = x * 10 + c - '0';
  if (fu) x = -x;
};
template <class T>
inline void read(T& x, T& y) {
  read(x);
  read(y);
}
template <class T>
inline void read(T& x, T& y, T& z) {
  read(x);
  read(y);
  read(z);
}
inline char getc() {
  char c;
  for (c = getchar(); c <= 32; c = getchar())
    ;
  return c;
}
const int N = 155;
const int inf = int(1e9);
int n, i, j, k, l, p, v[N];
char s[N];
int f[N][N][N], g[N][N], u[N][N];
bool vf[N][N][N], vg[N][N], vu[N][N];
int full(int x, int y);
int get(int x, int y, int l) {
  if (l == 0) return full(x, y);
  if (x > y) return -inf;
  if (y - x + 1 < l) return -inf;
  if (x == y) return (l == 1) ? 0 : -inf;
  if (vf[x][y][l]) return f[x][y][l];
  int& ans = f[x][y][l];
  ans = -inf;
  if (l == 1) {
    for (int i = (x); i <= (y); i++)
      ans = max(ans, full(x, i - 1) + full(i + 1, y));
  } else {
    for (int i = (x + 1); i <= (y); i++) {
      ans = max(ans, full(x, i - 1) + get(i, y, l));
    }
    for (int i = (x); i <= (y - 1); i++) {
      ans = max(ans, get(x, i, l) + full(i + 1, y));
    }
    if (s[x] == s[y]) ans = max(ans, get(x + 1, y - 1, l - 2));
  }
  return vf[x][y][l] = 1, ans;
}
int full(int x, int y) {
  if (x > y) return 0;
  if (vg[x][y]) return g[x][y];
  int& ans = g[x][y];
  ans = -inf;
  for (int t = (1); t <= (y - x + 1); t++)
    if (v[t] != -inf) ans = max(ans, get(x, y, t) + v[t]);
  return vg[x][y] = 1, ans;
}
int dp(int x, int y) {
  if (x > y) return 0;
  if (vu[x][y]) return u[x][y];
  int& ans = u[x][y];
  ans = max(dp(x, y - 1), dp(x + 1, y));
  for (int i = (x); i <= (y); i++) ans = max(ans, full(x, i) + dp(i + 1, y));
  return vu[x][y] = 1, ans;
}
int main() {
  read(n);
  for (i = 1; i <= n; i++) read(v[i]);
  for (i = 1; i <= n; i++)
    if (v[i] == -1) v[i] = -inf;
  scanf("%s", s + 1);
  printf("%d\n", dp(1, n));
  scanf("\n");
  return 0;
}
