using System; using System.Linq; using System.Collections.Generic; using System.Text; class Solution { static int c; static void Main() { var n = MyConsole.ReadInt(); var a = MyConsole.ReadInt(); var b = MyConsole.ReadInt(); var q = MyConsole.ReadInt(); var c = MyConsole.ReadArray(); var invB = ModInverse(b, modulo); for(var i = 0; i < q; i++) { var line = MyConsole.ReadArray(); if (line[0] == 1) { c[line[1]] = line[2]; }else { var l = line[1]; var r = line[2]; var d = 0l; for(var k = l; k < r; k++) { d = ((c[k] - a * d) * b)%modulo; } if ((a * d) % modulo == c[r]) { Console.WriteLine("Yes"); } else { Console.WriteLine("No"); } } } } static int ModInverse(int a, int n) { int i = n, v = 0, d = 1; while (a > 0) { int t = i / a, x = a; a = i % x; i = x; x = d; d = v - t * x; v = x; } v %= n; if (v < 0) v = (v + n) % n; return v; } static int modulo = 1000000007; } static class MyConsole { public static long[] ReadArrayLong() { var line = Console.ReadLine(); if (line.Trim().Length == 0) {// ignore white space line = Console.ReadLine(); } return line.Trim().Split(' ', '\t').Select(long.Parse).ToArray(); } public static int[] ReadArray() { var line = Console.ReadLine(); if (line.Trim().Length == 0) {// ignore white space line = Console.ReadLine(); } return line.Trim().Split(' ', '\t').Select(int.Parse).ToArray(); } public static int ReadInt() { var str = ReadStringNumber(); return int.Parse(str); } public static long ReadLong() { var str = ReadStringNumber(); return long.Parse(str); } public static ulong ReadUlong() { var str = ReadStringNumber(); return ulong.Parse(str); } public static string ReadLine() { var l = Console.ReadLine(); if (string.IsNullOrWhiteSpace(l)) { l = Console.ReadLine(); } return l; } private static string ReadStringNumber() { var builder = new System.Text.StringBuilder(); while (true) { var c = (char)Console.Read(); if (c != ' ' && c != '\r' && c != '\n' && c != '\t' && c != 0 && c != 65535) { builder.Append(c); } else { if (builder.Length > 0) { break; } } } return builder.ToString(); } public static int[] ReadArrayFlagged(int startFlag, int endFlag) { var initialArray = ReadArray(); var flaggedArray = new int[initialArray.Length + 2]; flaggedArray[0] = startFlag; flaggedArray[flaggedArray.Length - 1] = endFlag; Array.Copy(initialArray, 0, flaggedArray, 1, initialArray.Length); return flaggedArray; } public static void ReadLine(out int int0, out int int1) { var arr = ReadArray(); int0 = arr[0]; int1 = arr[1]; } public static void ReadLineLong(out long int0, out long int1) { var arr = ReadArrayLong(); int0 = arr[0]; int1 = arr[1]; } public static void ReadLineLong(out long int0, out long int1, out long int2) { var arr = ReadArrayLong(); int0 = arr[0]; int1 = arr[1]; int2 = arr[2]; } public static void ReadLine(out int int0, out int int1, out int int2) { var arr = ReadArray(); int0 = arr[0]; int1 = arr[1]; int2 = arr[2]; } public static void ReadLine(out int int0, out int int1, out int int2, out int int3) { var arr = ReadArray(); int0 = arr[0]; int1 = arr[1]; int2 = arr[2]; int3 = arr[3]; } public static void WriteArray(T[] array) { var sb = new StringBuilder(); for (var i = 0; i < array.Length; i++) { sb.Append(array[i]); if (i < array.Length - 1) { sb.Append(" "); } } Console.WriteLine(sb.ToString()); } } static class MyCommon { public static int[] Bucketify(int[] a, int maxValue) { var buckets = new int[maxValue + 1]; Array.ForEach(a, i => buckets[i]++); return buckets; } public static IEnumerable GetDigits(long n) { while (n > 0) { yield return (int)(n % 10); n /= 10; } } } class MyTimer { private DateTime Start = DateTime.UtcNow; public double GetSeconds() { return DateTime.UtcNow.Subtract(Start).TotalSeconds; } }