#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; const ll mod = 1000000007; #define rep(i,n) for(int i=0;i=0;i--) #define all(x) (x).begin(),(x).end() int main() { int n; cin >> n; string s; cin >> s; vector as(n); rep(i, n) cin >> as[i]; int q; cin >> q; vector ks(q); rep(i, q) cin >> ks[i]; //Aと敵個数の累積和を計算 vector acs(n + 1, 0); vector ccs(n + 1, 0); rep(i, n) { acs[i + 1] = acs[i] + as[i]; ccs[i + 1] = ccs[i]; if (s[i] == 'E') { ccs[i + 1] += 1; } } //敵数tを倒すために必要なエネルギーの最小値を計算 vector dp(n + 1, 1000000000); dp[0] = 0; rep(i, n) { reple(j, i + 1, n) { int t = ccs[j] - ccs[i]; dp[t] = min(dp[t], acs[j] - acs[i]); } } for (auto k : ks) { //lb:条件をクリアできる int lb = -1; //ub:条件をクリアできない int ub = n + 1; while (ub - lb > 1) { int mid = (lb + ub) / 2; //mid体の敵を倒すのに必要な威力をk以下にできるか? if (dp[mid] <= k) { lb = mid; } else { ub = mid; } } cout << lb << endl; } return 0; }