#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-9;
const int oo = 0x3f3f3f3f;
const int maxN = 160;
int N;
long long A[maxN];
string str;
long long dp[maxN][maxN][maxN];
long long calc(int i, int j, int k) {
  if (i - 1 == j) return (k > 0) ? A[k] : 0;
  long long &res = dp[i][j][k + 1];
  if (res != -2) return res;
  int zk = (k == -1) ? -1 : 0;
  int mk = max(0, k);
  res = (k < 0) ? 0 : -1;
  if (k > 0 && A[k] != -1) {
    long long b = calc(i, j, 0);
    if (b >= 0) res = max(res, A[k] + b);
  }
  if (i == j) {
    return res = max(res, A[mk + 1]);
  }
  if (str[i] == str[j]) {
    res = max(res, calc(i + 1, j - 1, mk + 2));
  }
  for (int m = (i); m < (j); m++) {
    long long a = calc(i, m, zk);
    long long b = calc(m + 1, j, zk);
    long long ak = -1, bk = -1;
    if (k > 0) {
      ak = calc(i, m, k);
      bk = calc(m + 1, j, k);
    }
    if (a >= 0 && b >= 0) res = max(res, a + b);
    if (a >= 0 && bk >= 0) res = max(res, a + bk);
    if (ak >= 0 && b >= 0) res = max(res, ak + b);
  }
  return res;
}
int main() {
  cin >> N;
  A[0] = 0;
  for (int i = (1); i < (N + 1); i++) cin >> A[i];
  cin >> str;
  for (int i = (0); i < (N); i++)
    for (int j = (i); j < (N); j++)
      for (int k = (0); k < (N + 2); k++) dp[i][j][k] = -2;
  cout << calc(0, N - 1, -1) << endl;
}
