#include #include using namespace std; using ll = long long; // 有名MODたちでチェックする、WAを期待する解法 const ll MOD1 = 1000000007; const ll MOD2 = 998244353; const ll MOD3 = (1LL << 61) - 1; static_assert(MOD1 < numeric_limits::max() / 2); static_assert(MOD2 < numeric_limits::max() / 2); static_assert(MOD3 < numeric_limits::max() / 2); using S = tuple; S op(const S a, const S b) { auto [a1, a2, a3] = a; auto [b1, b2, b3] = b; return {(a1 + b1) % MOD1, (a2 + b2) % MOD2, (a3 + b3) % MOD3}; } S e() { return {0, 0, 0}; } using segtree = atcoder::segtree; int main() { ll n, q, k; cin >> n >> q >> k; vector a; for (int i = 0; i < n; i++) { ll x; cin >> x; a.push_back({ (x % MOD1 + MOD1) % MOD1, (x % MOD2 + MOD2) % MOD2, (x % MOD3 + MOD3) % MOD3, }); } // b[i] := (a[i] * pow(k, i)) % MOD vector b(n); __uint128_t powk1 = 1, powk2 = 1, powk3 = 1; for (int i = 0; i < n; i++) { // a[i], powk ともに MOD < 2^63 以下なので、128ビットで十分 auto [ai1, ai2, ai3] = a[i]; b[i] = { (ai1 * powk1) % MOD1, (ai2 * powk2) % MOD2, (ai3 * powk3) % MOD3, }; powk1 = (powk1 * k) % MOD1; powk2 = (powk2 * k) % MOD2; powk3 = (powk3 * k) % MOD3; } segtree st(b); for (int i = 0; i < q; i++) { int l, r; cin >> l >> r; l--; r--; cout << (st.prod(l, r + 1) != make_tuple(0, 0, 0) ? "Yes" : "No") << endl; } }