#include using namespace std; typedef long long ll; #define F first #define S second const int MOD = 1e9 + 7; const int MAXN = 1e5 + 10; int n, q, c[MAXN]; ll y, ss[MAXN], weed[4 * MAXN]; ll pw(ll a, ll b){ ll ret = 1; while (b){ if (b & 1) ret = ret * a % MOD; b >>= 1; a = a * a % MOD; } return ret; } void plant(int v, int b, int e){ if (e - b == 1){ weed[v] = c[b]; return; } int mid = b+e>>1; plant(v<<1, b, mid); plant(v<<1^1, mid, e); weed[v] = (weed[v<<1^1] * ss[mid - b] + weed[v<<1]) % MOD; } void water(int v, int b, int e, int pos, int val){ if (e - b == 1){ c[b] = val; weed[v] = c[b]; return; } int mid = b + e >> 1; if (pos < mid) water(v<<1, b, mid, pos, val); else water(v<<1^1, mid, e, pos, val); weed[v] = (weed[v<<1^1] * ss[mid - b] + weed[v<<1]) % MOD; } pair smoke(int v, int b, int e, int l, int r){ if (l <= b && e <= r) return {weed[v], e-b}; if (r <= b || e <= l) return {0, 0}; int mid = b + e >> 1; auto g = smoke(v<<1, b, mid, l, r); auto h = smoke(v<<1^1, mid, e, l, r); h.S += g.S; h.F = (h.F*ss[g.S] + g.F) % MOD; return h; } int main(){ ios::sync_with_stdio(false); cin.tie(0); ll ta, tb; cin >> n >> ta >> tb >> q; tb = -tb; tb = (tb % MOD + MOD) % MOD; y = tb * pw(ta, MOD - 2) % MOD; ss[0] = 1; for (int i = 1; i < MAXN; i++) ss[i] = ss[i - 1] * y % MOD; for (int i = 0; i < n; i++) cin >> c[i]; plant(1, 0, n); while (q--){ int type; cin >> type; if (type == 1){ int pos, val; cin >> pos >> val; water(1, 0, n, pos, val); } else{ int l, r; cin >> l >> r, r++; if (smoke(1, 0, n, l, r).F) cout << "No\n"; else cout << "Yes\n"; } } return 0; }