#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]; for (auto k : ks) { ll maxCount = 0; //倒せる敵の数の最大値を尺取り法で計算(範囲はleft<=i<=right) ll count = 0; ll power = k; int right = -1; rep(left, n) { //前回左端の結果を戻す if (left > 0) { power += as[left - 1]; if(s[left - 1] == 'E')count--; } while (right + 1 < n) { //威力が足りない場合は終了 if (power < as[right + 1]) break; right++; //敵破壊数をカウントアップ if (s[right] == 'E') count++; //威力減衰 power -= as[right]; } //最大値更新 maxCount = max(maxCount, count); } cout << maxCount << endl; } return 0; }