#include using namespace std; typedef long long ll; const int N = 1e5 + 10; const int MOD = 1e9 + 7; int n, q; ll a, b, x; ll t[N + N], c[N]; ll pwr[N], inv[N]; ll bigMod (ll a, ll e) { if (e == -1) e = MOD - 2; ll r = 1LL; while (e) { if (e & 1) r = (r * a) % MOD; a = (a * a) % MOD; e >>= 1; } return r; } void init (void) { for (int i = n - 1; i; --i) { t[i] = (t[i << 1] + t[i << 1 | 1]) % MOD; } } void update (int p, ll v) { for (t[p += n] = v; p > 1; p >>= 1) { t[p >> 1] = (t[p] + t[p ^ 1]) % MOD; } } ll query (int l, int r) { ll sum = 0; for (l += n, r += n; l < r; l >>= 1, r >>= 1) { if (l & 1) sum += t[l++], sum %= MOD; if (r & 1) sum += t[--r], sum %= MOD; } return sum; } int main (int argc, char const *argv[]) { scanf("%d %lld %lld %d", &n, &a, &b, &q); x = (-b * bigMod(a, -1)) % MOD; x += MOD, x %= MOD; ll z; inv[0] = 1LL, pwr[0] = 1LL; if (x != 0) { z = bigMod(x, -1); } ll power = 1LL; for (int i = 0; i < n; ++i) { scanf("%lld", t + n + i); c[i] = t[n + i]; if (x != 0) { if (i > 0) inv[i] = (inv[i - 1] * z) % MOD; t[n + i] *= pwr[i]; t[n + i] %= MOD; pwr[i + 1] = (pwr[i] * x) % MOD; } } init(); while (q--) { int cmd, l, r; scanf("%d %d %d", &cmd, &l, &r); if (cmd == 1) { ll v = r; if (x != 0) v *= pwr[l], v %= MOD; c[l] = v; update(l, v); } else { if (x == 0) { ll tot = c[l]; if (tot == 0) puts("Yes"); else puts("No"); } else { ll tot = query(l, r + 1); tot *= inv[l], tot %= MOD; assert(tot >= 0); if (tot == 0) puts("Yes"); else puts("No"); } } } return 0; }