#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef std::vector vi; typedef std::vector vb; typedef std::vector vs; typedef std::vector vd; typedef std::vector vll; typedef std::vector > vvi; typedef vector vvvi; typedef vector vvll; typedef std::vector > vpi; typedef vector vvpi; typedef std::pair pi; typedef std::pair pll; typedef std::vector vpll; const long long mod = 1000000007; #define all(c) (c).begin(),(c).end() #define sz(c) (int)(c).size() #define forn(i, a, b) for(int i = a; i < b; i++) #define pb push_back #define mp make_pair ll gcd (ll a, ll b, ll & x, ll & y) { if (a == 0) { x = 0; y = 1; return b; } ll x1, y1; ll d = gcd (b%a, a, x1, y1); x = y1 - (b / a) * x1; y = x1; return d; } ll invmod(ll a, ll modulo) { ll x, y; gcd(a, modulo, x, y); return (x+modulo*modulo)%modulo; } class stree { public: vll t; int s; void build (vll & a, int v, int tl, int tr) { if(v==1) { t.resize(a.size() * 4); s = a.size(); } 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] + t[v*2+1]; } } void set (int v, int tl, int tr, int pos, ll val) { if (pos == tl && tr == pos) { t[v] = val; } else { int tm = (tl + tr) / 2; if(pos<=tm) set(v*2, tl, tm, pos,val); else set(v*2+1, tm+1, tr, pos,val); t[v] = (t[v*2] + t[v*2+1])%mod; } } ll get (int v, int tl, int tr, int l, int r) { if(l>r) return 0; if (tl == l && tr == r) return t[v]; int tm = (tl + tr) / 2; return (get (v*2, tl, tm, l, min(r,tm)) + get(v*2+1, tm+1, tr, max(l,tm+1), r))%mod; } }; int main() { int n,q,aa,bb; scanf("%d %d %d %d", &n, &aa, &bb, &q); if(bb==0) { vll c(n); forn(i,0,n) scanf("%lld", &c[i]); forn(i,0,q) { int t,l,r; scanf("%d %d %d", &t, &l, &r); if(t==2) { if(c[l] == 0) { printf("Yes\n"); } else { printf("No\n"); } } else { c[l] = r; } } return 0; } ll a= aa; ll b= bb; ll u = (b*invmod(a, mod))%mod; u = (mod-u)%mod; vll dp(1,1); forn(i,0,n-1) dp.pb((dp.back()*u)%mod); vll c(n); forn(i,0,n) scanf("%lld", &c[i]); forn(i,0,n) c[i] = (c[i] * dp[i])%mod; stree st; st.build(c, 1, 0, n-1); forn(i,0,q) { int t,l,r; scanf("%d %d %d", &t, &l, &r); if(t==2) { if(st.get(1, 0, n-1, l, r) == 0) { printf("Yes\n"); } else { printf("No\n"); } } else { st.set(1, 0, n-1, l, (r*dp[l])%mod); } } }