#include <bits/stdc++.h>
using namespace std;
int bonus[155], n;
char str[155];
long long dp[155][155][155];
bool vst[155][155];
long long fuck[155];
void MM(long long &a, long long b) {
  if (a < b) a = b;
}
void calc(int l, int r) {
  if (vst[l][r]) return;
  vst[l][r] = true;
  if (l > r) {
    dp[l][r][0] = 0;
    return;
  }
  if (l == r) {
    dp[l][r][0] = bonus[1];
    dp[l][r][1] = 0;
    return;
  }
  if (str[l] == str[r]) {
    calc(l + 1, r - 1);
    int len = r - l + 1 - 2;
    for (int k = (0); k < (len + 1); k++) {
      MM(dp[l][r][k + 2], dp[l + 1][r - 1][k]);
      MM(dp[l][r][0], dp[l + 1][r - 1][k] + bonus[k + 2]);
    }
  }
  for (int i = l; i + 1 <= r; i++) {
    calc(l, i);
    calc(i + 1, r);
    int len1 = i - l + 1, len2 = r - i;
    for (int k = (0); k < (len1 + 1); k++)
      MM(dp[l][r][k], dp[l][i][k] + dp[i + 1][r][0]);
    for (int k = (0); k < (len2 + 1); k++)
      MM(dp[l][r][k], dp[l][i][0] + dp[i + 1][r][k]);
  }
}
int main() {
  while (scanf("%d", &n) != EOF) {
    for (int i = (1); i < (n + 1); i++) {
      scanf("%d", bonus + i);
      if (bonus[i] < 0) bonus[i] = -(1 << 30);
    }
    scanf(" %s", str + 1);
    memset(dp, 0xf0, sizeof(dp));
    memset(vst, false, sizeof(vst));
    for (int i = (1); i < (n + 1); i++)
      for (int j = (1); j < (n + 1); j++)
        if (i <= j) {
          calc(i, j);
        }
    memset(fuck, 0xf0, sizeof(fuck));
    fuck[0] = 0;
    for (int i = (0); i < (n); i++) {
      for (int j = i + 1; j <= n; j++) {
        for (int k = j; k <= n; k++) {
          MM(fuck[k], fuck[i] + dp[j][k][0]);
        }
      }
    }
    long long ma = 0;
    for (int i = (0); i < (n + 1); i++) MM(ma, fuck[i]);
    cout << ma << '\n';
  }
}
