#include #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; int p = (int) 1e9 + 7; int add(int a, int b) { return (a + b) % p; } int mul(int a, int b) { return (1ll * a * b) % p; } int bin(int a, int n) { if (n == 0) { return 1; } else if (n % 2 == 0) { int t = bin(a, n / 2); return mul(t, t); } else { return mul(a, bin(a, n - 1)); } } const int N = 1e5 + 1; int t[4 * N]; int rp[N]; pair get(int v, int l, int r, int tl, int tr) { if (tl >= r || tr <= l) { return {0, 0}; } if (tl >= l && tr <= r) { return {t[v], tr - tl}; } else { int tm = (tl + tr) / 2; auto a = get(v * 2 + 1, l, r, tl, tm); auto b = get(v * 2 + 2, l, r, tm, tr); return {add(a.first, mul(b.first, rp[a.second])), a.second + b.second}; } } void upd(int v, int l, int r, int i, int x) { if (r - l == 1) { t[v] = x; } else { int m = (l + r) / 2; if (i < m) { upd(v * 2 + 1, l, m, i, x); } else { upd(v * 2 + 2, m, r, i, x); } t[v] = add(t[v * 2 + 1], mul(rp[m - l], t[v * 2 + 2])); } } int main(){ ios::sync_with_stdio(0); int n; int a; int b; int q; cin >> n >> a >> b >> q; int x = mul((p - b), bin(a, p - 2)); rp[0] = 1; for (int i = 1; i < N; i++) { rp[i] = mul(rp[i - 1], x); } vector c(n); for(int c_i = 0; c_i < n; c_i++) { cin >> c[c_i]; upd(0, 0, n, c_i, c[c_i]); } for(int a0 = 0; a0 < q; a0++){ int q; int l; int r; cin >> q >> l >> r; if (q == 1) { upd(0, 0, n, l, r); } else { if (get(0, l, r + 1, 0, n).first == 0) { cout << "Yes\n"; } else { cout << "No\n"; } } } return 0; }