#include <bits/stdc++.h>
using namespace std;
const int N = 3005;
int n, k, q;
int a[N];
int r[N];
vector<int> g[N];
// check if v can reach u
bool dfs(int v, int target, vector<int>& vis) {
if (v == target) return true;
vis[v] = 1;
for (int to : g[v]) {
if (!vis[to] && dfs(to, target, vis)) return true;
}
return false;
}
// try adding edge
bool check(int l, int i, vector<pair<int,int>>& edges) {
int x = a[i - 1];
int y = a[i];
if (x == y) return false;
int u, v;
if ((i & 1) == (l & 1)) {
// need >
// x > y → y -> x
u = y;
v = x;
} else {
// need <
// x < y → x -> y
u = x;
v = y;
}
vector<int> vis(k + 1, 0);
if (dfs(v, u, vis)) return false;
g[u].push_back(v);
edges.push_back({u, v});
return true;
}
void solve(int start) {
int rr = start;
vector<pair<int,int>> edges;
for (int l = start; l <= n; l += 2) {
edges.clear();
for (int i = 1; i <= k; i++) g[i].clear();
rr = l;
r[l] = l;
while (rr + 1 <= n && check(l, rr + 1, edges)) {
rr++;
r[l] = rr;
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> k >> q;
for (int i = 1; i <= n; i++) cin >> a[i];
solve(1);
solve(2);
while (q--) {
int l, rr;
cin >> l >> rr;
cout << (rr <= r[l] ? "YES\n" : "NO\n");
}
return 0;
}