#include <bits/stdc++.h>
using namespace std;
const int N = 100;
const long long OO = 1e18;
int n;
string s;
vector<long long> a;
bool cont[N][N];
long long dp[N][N];
long long dp3[N][N][N + 1][2];
long long dp2[N + 1];
void cmax(long long& a, long long b) { a = max(a, b); }
int main(int argc, char* argv[]) {
  ios::sync_with_stdio(0);
  cin >> n;
  cin >> s;
  a.resize(n);
  for (int(i) = (0); (i) < (n); (i)++) {
    cin >> a[i];
  }
  for (int(i) = (0); (i) < (n); (i)++) {
    cont[i][i] = 1;
    for (int(j) = (i + 1); (j) < (n); (j)++) {
      if (s[j] != s[i]) {
        break;
      } else {
        cont[i][j] = 1;
      }
    }
  }
  for (int(i) = (1); (i) < (n + 1); (i)++) {
    dp2[i] = a[i - 1];
    for (int(k) = (1); (k) < (i); (k)++) {
      cmax(dp2[i], dp2[i - k] + dp2[k]);
    }
  }
  for (int(i) = (0); (i) < (n); (i)++) {
    for (int(j) = (0); (j) < (n); (j)++) {
      for (int(cnt) = (0); (cnt) < (n + 1); (cnt)++) {
        for (int(d) = (0); (d) < (2); (d)++) {
          dp3[i][j][cnt][d] = -OO;
        }
      }
    }
  }
  for (int(l) = (1); (l) < (n + 1); (l)++) {
    for (int(i) = (0); (i) < (n - l + 1); (i)++) {
      int j = i + l - 1;
      for (int(cnt) = (1); (cnt) < (l + 1); (cnt)++) {
        for (int(d) = (0); (d) < (2); (d)++) {
          for (int(mid) = (i); (mid) < (j + 1); (mid)++) {
            if (s[mid] - '0' == d) {
              long long s = 0;
              if (mid - 1 >= i) s += dp[i][mid - 1];
              if (cnt - 1 == 0)
                s += dp[mid + 1][j];
              else if (mid + 1 <= j && j - mid >= cnt - 1)
                s += dp3[mid + 1][j][cnt - 1][d];
              else
                s = -OO;
              cmax(dp3[i][j][cnt][d], s);
            }
          }
        }
      }
      if (cont[i][j]) {
        cmax(dp[i][j], dp2[l]);
      }
      for (int(k) = (i); (k) < (j); (k)++) {
        cmax(dp[i][j], dp[i][k] + dp[k + 1][j]);
      }
      for (int(cnt) = (1); (cnt) < (l + 1); (cnt)++) {
        for (int(d) = (0); (d) < (2); (d)++) {
          cmax(dp[i][j], dp3[i][j][cnt][d] + dp2[cnt]);
        }
      }
    }
  }
  cout << dp[0][n - 1] << endl;
  return 0;
}
