#include <bits/stdc++.h>
using namespace std;
int N;
long long v[666];
char s[666];
long long memo[2][166][166][166];
long long dp(int elim, int lpos, int rpos, int acc) {
  if (lpos > rpos) {
    return v[acc];
  }
  long long &mem = memo[elim][lpos][rpos][acc];
  if (mem != -1LL) return mem;
  mem = elim ? -1LL << 40 : 0LL;
  if (s[lpos] == s[rpos] && lpos < rpos) {
    mem = max(mem, dp(elim, lpos + 1, rpos - 1, acc + 2));
  } else if (lpos == rpos) {
    mem = max(mem, dp(elim, lpos + 1, rpos, acc + 1));
  }
  for (int u = lpos; u <= rpos; ++u) {
    mem = max(mem, dp(1, lpos, u, 0) + dp(elim, u + 1, rpos, acc));
  }
  for (int u = rpos; u >= lpos; --u) {
    mem = max(mem, dp(elim, lpos, u - 1, acc) + dp(1, u, rpos, 0));
  }
  if (elim == 0) {
    mem = max(mem, dp(elim, lpos, rpos - 1, 0));
    mem = max(mem, dp(elim, lpos + 1, rpos, 0));
  }
  return mem;
}
int main() {
  while (cin >> N) {
    v[0] = 0LL;
    for (int i = 0; i < (int)(N); ++i) {
      cin >> v[i + 1];
      if (v[i + 1] < 0) {
        v[i + 1] = -1LL << 40;
      }
    }
    cin >> s;
    memset((memo), (-1), sizeof(memo));
    cout << dp(0, 0, N - 1, 0) << endl;
  }
}
