#include "bits/stdc++.h" using namespace std; const int N = 1e5 + 5; const int SN = 1 << 18; const int mod = 1e9 + 7; int n , a , b , q; int type[N]; int arr[N]; int ba; int pw[N]; int power(int a , int b){ int res = 1; while(b){ if(b & 1){ res = (1LL * res * a) % mod; } a = (1LL * a * a) % mod; b >>= 1; } return res; } int segtree[SN]; void build(int l , int r , int node){ if(l == r){ segtree[node] = arr[l]; } else{ int mid = l + r >> 1; build(l , mid , node + node); build(mid + 1 , r , node + node + 1); segtree[node] = (segtree[node + node] + 1LL * segtree[node + node + 1] * pw[mid - l + 1]) % mod; } } void update(int l , int r , int node , int idx , int val){ if(l == r){ segtree[node] = val; } else{ int mid = l + r >> 1; if(idx <= mid){ update(l , mid , node + node , idx , val); } else{ update(mid + 1 , r , node + node + 1 , idx , val); } segtree[node] = (segtree[node + node] + 1LL * segtree[node + node + 1] * pw[mid - l + 1]) % mod; } } pair < int , int > query(int l , int r , int node , int ql , int qr){ if(l > qr || r < ql){ return make_pair(0 , 0); } if(l >= ql && r <= qr){ return make_pair(segtree[node] , r - l + 1); } int mid = l + r >> 1; auto L = query(l , mid , node + node , ql , qr); auto R = query(mid + 1 , r , node + node + 1 , ql , qr); return make_pair((L.first + 1LL * R.first * pw[L.second]) % mod , L.second + R.second); } int main(){ scanf("%d %d %d %d" , &n , &a , &b , &q); for(int i = 1 ; i <= n ; ++i){ scanf("%d" , arr + i); } ba = (mod - ((1LL * b * power(a , mod - 2)) % mod)) % mod; pw[0] = 1; pw[1] = ba; for(int i = 2 ; i <= n ; ++i){ pw[i] = (1LL * pw[i - 1] * ba) % mod; } build(1 , n , 1); while(q--){ scanf("%d %d %d" , &ba , &a , &b); if(ba == 1){ update(1 , n , 1 , a + 1 , b); } else{ if(query(1 , n , 1 , a + 1 , b + 1).first == 0){ printf("Yes\n"); } else{ printf("No\n"); } } } }