#include using namespace std; typedef long long Long; const Long MOD = 1e9 + 7; const int MAXN = 1e5; int n, q; Long A, B; Long c[MAXN + 10]; Long modpow(Long b, Long p) { if(p < 0) return modpow(modpow(b, MOD - 2), -p); if(b < 0) b = b % MOD + MOD; Long rs = 1; while(p > 0) { if(p & 1LL) rs = (rs * b) % MOD; p >>= 1; b = b*b % MOD; } return rs; } struct dat { int sz; Long v; dat merge(dat d) const { if(sz == 0) return d; if(d.sz == 0) return *this; dat tmp; tmp.sz = sz + d.sz; Long ml = (modpow(MOD-A, d.sz) * modpow(B, -d.sz)) % MOD; tmp.v = ((ml * v) % MOD + d.v) % MOD; return tmp; } }; dat tree[4 * MAXN + 10]; void build(int cn, int b, int e) { if(b == e) { tree[cn] = dat{1, (c[b] * modpow(B, -1)) % MOD}; //cerr << "tree[" << b << ", " << e << "] = " << tree[cn].v << "\n"; return; } int m = (b + e) / 2; build(2 * cn, b, m); build(2 * cn + 1, m + 1, e); tree[cn] = tree[2*cn].merge(tree[2*cn+1]); } void upd(int cn, int b, int e, int i, Long v) { if(i < b || i > e) return; if(i <= b && e <= i) { tree[cn] = dat{1, (v * modpow(B, -1)) % MOD}; //cerr << "tree[" << b << ", " << e << "] = " << tree[cn].v << "\n"; return; } int m = (b + e) / 2; upd(2 * cn, b, m, i, v); upd(2 * cn + 1, m + 1, e, i, v); tree[cn] = tree[2*cn].merge(tree[2*cn+1]); } dat get(int cn, int b, int e, int l, int r) { if(r < b || l > e) return dat{0,0LL}; if(l <= b && e <= r) return tree[cn]; int m = (b + e) / 2; dat L = get(2*cn, b, m, l, r); dat R = get(2*cn+1, m+1, e, l, r); return L.merge(R); } Long get(Long l, Long r) { return get(1, 1, n, l, r).v; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin >> n >> A >> B >> q; for(int i = 1; i <= n; i++) { cin >> c[i]; } build(1, 1, n); for(int qi = 0; qi < q; qi++) { int tp, x, y; cin >> tp >> x >> y; if(tp == 1) { c[x+1] = y; upd(1, 1, n, x+1, y); } else if(y == x){ cout << "No\n"; } else if(B == 0) { if(c[x+1] == 0) cout << "Yes\n"; else cout << "No\n"; } else { //cerr << "query " << x+1 << " " << y << "\n"; Long k = get(x+1, y); Long a_have = k; Long a_need = (c[y+1] * modpow(A, -1)) % MOD; //cerr << a_have << " " << a_need << "\n"; if(a_have == a_need) cout << "Yes\n"; else cout << "No\n"; } } }