1 #include <bits/stdc++.h>
2 using namespace std;
3 typedef long long ll;
4 struct hjtree
5 {
6 int l, r, sum;
7 }a[2000005];
8 int d[100005], ql[100005], qr[100005], ctot, root[100005], ptot;
9 ll sh[200005], cd[200005];
10
11 void update(int o1, int &o2, int l, int r, int id)
12 {
13 int mid = (l + r) >> 1;
14 if(!o2) o2 = ++ptot;
15 a[o2].sum = a[o1].sum + 1;
16 if(l == r) return;
17 if(id <= mid) a[o2].r = a[o1].r, update(a[o1].l, a[o2].l, l, mid, id);
18 else a[o2].l = a[o1].l, update(a[o1].r, a[o2].r, mid + 1, r, id);
19 }
20
21 int query(int o1, int o2, int l, int r, int id)
22 {
23 int mid = (l + r) >> 1;
24 if(l == r) return a[o2].sum - a[o1].sum;
25 if(id <= mid) return query(a[o1].l, a[o2].l, l, mid, id);
26 return query(a[o1].r, a[o2].r, mid + 1, r, id);
27 }
28
29 int main()
30 {
31 int n, m, k, tmp;
32 scanf("%d%d%d", &n, &m, &k);
33 for(int i = 1; i <= n; i++)
34 scanf("%d", d + i);
35 for(int i = 1; i <= n - k + 1; i++)
36 for(int j = 0; j < k; j++)
37 sh[i] = sh[i] * 998244353 + d[i + j];
38 for(int i = 1; i <= n - k + 1; i++)
39 cd[i] = sh[i];
40 for(int i = 1; i <= m; i++)
41 {
42 scanf("%d%d", ql + i, qr + i);
43 for(int j = 1; j <= k; j++)
44 {
45 scanf("%d", &tmp);
46 sh[n - k + 1 + i] = sh[n - k + 1 + i] * 998244353 + tmp;
47 }
48 cd[n - k + 1 + i] = sh[n - k + 1 + i];
49 }
50 sort(cd + 1, cd + n - k + m + 2);
51 for(int i = 1; i <= n - k + m + 1; i++)
52 sh[i] = lower_bound(cd + 1, cd + n - k + m + 2, sh[i]) - cd;
53 for(int i = 1; i <= n - k + 1; i++)
54 update(root[i - 1], root[i], 1, 200000, (int)sh[i]);
55 for(int i = 1; i <= m; i++)
56 puts(query(root[ql[i] - 1], root[qr[i] - k + 1], 1, 200000, (int)sh[n - k + 1 + i]) ? "No" : "Yes");
57 return 0;
58 }