#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; ll t[400005]; const ll MOD = 1000000007ll; ll binpow(ll a, int n) { ll res = 1ll; while (n > 0) { if (n & 1) { res = (res * a) % MOD; --n; } else { a = (a * a) % MOD; n >>= 1; } } return res; } ll get_inv(ll a) { return binpow(a, MOD - 2); } ll modder; void build (ll a[], int v, int tl, int tr) { if (tl == tr) t[v] = a[tl]; else { int tm = (tl + tr) / 2; build (a, v*2, tl, tm); build (a, v*2+1, tm+1, tr); t[v] = (t[v*2] + binpow(modder, tm - tl + 1) * t[v*2+1]) % MOD; } } int sum (int v, int tl, int tr, int l, int r) { if (l > r) return 0; if (l == tl && r == tr) return t[v]; int tm = (tl + tr) / 2; return (sum (v*2, tl, tm, l, min(r,tm)) + binpow(modder, min(r, tm) - l + 1) * sum (v*2+1, tm+1, tr, max(l,tm+1), r)) % MOD; } void update (int v, int tl, int tr, int pos, int new_val) { if (tl == tr) t[v] = new_val; else { int tm = (tl + tr) / 2; if (pos <= tm) update (v*2, tl, tm, pos, new_val); else update (v*2+1, tm+1, tr, pos, new_val); t[v] = (t[v*2] + binpow(modder, tm - tl + 1) * t[v*2+1]) % MOD; } } int main(){ int n; int a; int b; int q; cin >> n >> a >> b >> q; modder = MOD - b * get_inv(a) % MOD; if (modder == MOD) { modder = 0ll; } ll c[n]; for(int c_i = 0; c_i < n; c_i++){ cin >> c[c_i]; } build(c, 1, 0, n - 1); for(int a0 = 0; a0 < q; a0++){ int queryType; int first; int second; cin >> queryType >> first >> second; if (queryType == 1) { update(1, 0, n - 1, first, second); } else { if (sum(1, 0, n - 1, first, second) == 0ll) { cout << "Yes\n"; } else { cout << "No\n"; } // cout << sum(1, 0, n - 1, first, second) << "\n"; } // your code goes here } return 0; }