#include using namespace std; struct iofast_t { iofast_t() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); } } iofast; struct uns_t {} uns; template auto vec(Element init, Head arg, Args ...args) { if constexpr (sizeof...(Args) == 0) return std::vector(arg, init); else return std::vector(arg, vec(init, args...)); } template auto vec(uns_t, Head arg, Args ...args) { return vec(Element(), arg, args...); } template > T &chmin(T &l, T r, Compare &&f = less()) { return l = min(l, r, f); } template > T &chmax(T &l, T r, Compare &&f = less()) { return l = max(l, r, f); } int main() { constexpr int64_t inf = INT64_MAX/ 4; int n; cin >> n; string s; cin >> s; auto a = vec(uns, n); for (auto &e : a) cin >> e; auto acc1 = vec(uns, n + 1); auto acc2 = vec(uns, n + 1); acc1[0] = acc2[0] = 0; for (int i = 0; i < n; ++i) { if (s[i] == 'R') { acc1[i + 1] = acc1[i] + a[i]; acc2[i + 1] = acc2[i] - a[i]; } if (s[i] == 'B') { acc1[i + 1] = acc1[i] - a[i]; acc2[i + 1] = acc2[i] + a[i]; } } int64_t ans = -inf; int64_t min1 = 0, min2 = 0; for (int i = 1; i <= n; ++i) { ans = max({ ans, acc1[i] - min1, acc2[i] - min2, }); min1 = min(min1, acc1[i]); min2 = min(min2, acc2[i]); } cout << ans << endl; }