import java.io.*; import java.util.*; class Main { InputReader in; PrintWriter out; final long mod = (long)1e9 + 7; int n, qu; long c1, c2; long tree[]; long a[]; void build(int id, int l, int r) { if (l == r) tree[id] = a[l]; if (l >= r) return; int mid = (l + r) / 2; build(id * 2, l, mid); build(id * 2 + 1, mid + 1, r); tree[id] = (tree[id * 2] + tree[id * 2 + 1]) % mod; } void update(int id, int l, int r, int pos, long val) { if (l > r || pos > r || pos < l) return; if (l == r) { tree[id] = val; return; } int mid = (l + r) / 2; update(id * 2, l, mid, pos, val); update(id * 2 + 1, mid + 1, r, pos, val); tree[id] = (tree[id * 2] + tree[id * 2 + 1]) % mod; } long query(int id, int l, int r, int from, int to) { if (l > r || l > to || r < from) return 0; if (from <= l && r <= to) { return tree[id]; } int mid = (l + r) / 2; return (query(id * 2, l, mid, from, to) + query(id * 2 + 1, mid + 1, r, from, to)) % mod; } long mpow(long base, long m) { long ans = 1; for (; m > 0; m >>>= 1) { if ((m & 1) == 1) ans = (ans * base) % mod; base = (base * base) % mod; } return ans; } void main() { n = in.nextInt(); c1 = in.nextInt(); c2 = in.nextInt(); qu = in.nextInt(); c1 = (mpow(c1, mod - 2) * c2) % mod; a = new long[n]; long t = 1; for (int i = 0; i < n; ++i, t = (t * c1) % mod) { a[i] = in.nextInt(); if ((i & 1) == 1) a[i] = mod - a[i]; a[i] = (a[i] * t) % mod; } tree = new long[n * 4]; build(1, 0, n - 1); while (qu-- > 0) { int p, q; t = in.nextInt(); p = in.nextInt(); q = in.nextInt(); if (t == 1) { if ((p & 1) == 1) q = (int)mod - q; q = (int) ((long)q * mpow(c1, p) % mod); update(1, 0, n - 1, p, q); } else { long v = query(1, 0, n - 1, p, q); if (v == 0) out.println("Yes"); else out.println("No"); } } } public static void main(String[] args) { new Main(); } public Main() { in = new InputReader(System.getProperty("ONLINE_JUDGE") != null ? null : "main.inp"); out = new PrintWriter(System.out); main(); out.close(); } class InputReader { BufferedReader bf; StringTokenizer st = null; InputReader(String filename) { try { bf = new BufferedReader(filename == null ? new InputStreamReader(System.in) : new FileReader(filename) ); } catch (IOException e) { e.printStackTrace(); System.err.println("use stdin instead"); bf = new BufferedReader(new InputStreamReader(System.in)); } } String nextString() { try { while (st == null || !st.hasMoreTokens()) st = new StringTokenizer(bf.readLine()); } catch (IOException e) { throw new RuntimeException(e); } return st.nextToken(); } long nextLong() {return Long.parseLong(nextString());} int nextInt() {return Integer.parseInt(nextString());} double nextDouble() {return Double.parseDouble(nextString());} } }