#include #include #include #include #include using namespace std; const int64_t MOD = 1e9 + 7; int64_t powm(int64_t x, int64_t n) { int64_t ans = 1LL; for (; n; x = (x * x) % MOD, n /= 2) if (n & 1) ans = (ans * x) % MOD; return ans; } int64_t invm(int64_t x) { return powm(x, MOD - 2); } void add(vector &tree, int idx, int64_t val) { for (idx++; idx < tree.size(); idx += (idx & -idx)) tree[idx] = (tree[idx] + val) % MOD; } int64_t sumUpTo(vector &tree, int idx) { int64_t ans = 0LL; for (idx++; idx > 0; idx -= (idx & -idx)) ans = (ans + tree[idx]) % MOD; return ans; } int64_t sum(vector &tree, int left, int right) { return sumUpTo(tree, right) - sumUpTo(tree, left-1); } int main() { int N, Q; int64_t A, B, a, b, t; cin >> N >> A >> B >> Q; int64_t x = ((MOD - B) * invm(A)) % MOD; vector C(N), tree(N + 1); for (int i = 0; i < N; i++) { cin >> C[i]; C[i] = (C[i] * powm(x, i)); } for (int i = 0; i < N; i++) add(tree, i, C[i]); for (int i = 0; i < Q; i++) { cin >> t >> a >> b; if (t == 1) { int64_t u = (powm(x, a) * b) % MOD; int64_t d = (u + MOD - C[a]) % MOD; add(tree, a, d); C[a] = u; } else { int64_t u = sum(tree, a, b); cout << (u ? "No" : "Yes") << endl; } } return 0; }