#include #include #include #include #include using namespace std; #define MAXN 100000 typedef long long ull; ull mod = 1000000007; ull x[MAXN]; ull c[MAXN]; ull cache[2][100000]; ull modInv(ull n, ull mod) { ull start = n; ull prev = 0, rem = 1; ull b = mod; while(n > 0) { ull q = b/n; ull tmp = n; n = b%n; b = tmp; tmp = rem; rem = prev - q*rem; prev = tmp; } if(prev < 0) prev += mod; return prev; } int main() { ull n, a, b, q; cin >> n >> a >> b >> q; b = -b*modInv(a, mod)%mod; x[0] = 1; for(int i = 1; i < n; ++i) { x[i] = x[i-1]*b%mod; } for(int i = 0; i < n; ++i) { cin >> c[i]; } for(int i = 0; i < n; i += 1000) { ull res = 0; for(int j = i; j < i+1000 && j < n; ++j) { res = (res + c[j]*x[j-i]%mod)%mod; } cache[0][i] = res; } for(int i = 0; i < n; i += 100) { ull res = 0; for(int j = i; j < i+100 && j < n; ++j) { res = (res + c[j]*x[j-i]%mod)%mod; } cache[1][i] = res; } ull t, l, r; while(q--) { cin >> t >> l >> r; if(t == 1) { cache[0][l/1000*1000] = (cache[0][l/1000*1000] + (r - c[l])*x[l%1000]%mod)%mod; cache[1][l/100*100] = (cache[1][l/100*100] + (r - c[l])*x[l%100]%mod)%mod; c[l] = r; } else { ull res = 0; for(int i = 0; i <= r-l; ++i) { if((l+i)%1000 == 0 && l+i+1000 < r) { res = (res + cache[0][l+i]*x[i]%mod)%mod; i += 999; } else if((l+i)%100 == 0 && l+i+100 < r) { res = (res + cache[1][l+i]*x[i]%mod)%mod; i += 99; } else res = (res + c[l+i]*x[i]%mod)%mod; } if(res == 0) cout << "Yes" << endl; else cout << "No" << endl; } } return 0; }