1 1 1
1000000000
2 1
 20 2 15
12698951 55128070 116962690 156763505 188535242 194018601 269939893 428710623 442819431 483000923 516768937 552903993 633087286 656092270 671535141 714291344 717660646 846508634 879748146 937368929
2 7
1 2
2 4
1 19
1 12
1 5
2 18
2 11
1 16
2 1
2 3
2 19
1 17
2 9
2 6
 6 3 10
62417580 78150524 410053501 582708235 630200761 760672946
2 2
1 5
1 2
1 4
2 4
2 1
2 1
1 6
2 5
2 6

NO
 NO
NO
NO
NO
NO
NO
YES
NO
NO
 NO
YES
NO
NO
YES
YES

#include <bits/stdc++.h>
using namespace std;
struct node {
  long long left, right, add;
  long long val;
} tr[150009 * 8];
int father[250009];
int num[250009];
void build(long long i, long long left, long long right) {
  tr[i].left = left;
  tr[i].right = right;
  tr[i].add = 0;
  tr[i].val = 0;
  if (left == right) {
    father[left] = i;
    return;
  }
  build(2 * i, left, (left + right) / 2);
  build(2 * i + 1, (left + right) / 2 + 1, right);
}
void update(long long rp) {
  if (rp == 1) return;
  int fp = rp / 2;
  int a = tr[fp * 2].val;
  int b = tr[fp * 2 + 1].val;
  tr[fp].val = a + b;
  update(fp);
}
long long sum = 0;
void query(int i, int l, int r) {
  if (tr[i].left == l && tr[i].right == r) {
    sum = max(sum, tr[i].val);
    return;
  }
  i = i * 2;
  if (l <= tr[i].right) {
    if (r <= tr[i].right)
      query(i, l, r);
    else
      query(i, l, tr[i].right);
  }
  i++;
  if (r >= tr[i].left) {
    if (l >= tr[i].left)
      query(i, l, r);
    else
      query(i, tr[i].left, r);
  }
}
int main() {
  int n, q, k;
  int a, b;
  while (~scanf("%d%d%d", &n, &k, &q)) {
    for (int i = 0; i <= 150009 * 8; i++) {
      tr[i].val = 0;
    }
    sum = 0;
    map<int, int> mp;
    for (int i = 1; i <= n; i++) {
      scanf("%d", &num[i]);
      mp[num[i]] = i;
    }
    build(1, 1, n);
    int cnt = 1, ma = 0, mi = 1000000000;
    for (int i = 1; i <= q; i++) {
      sum = 0;
      scanf("%d%d", &a, &b);
      if (a == 1) {
        if (cnt <= k) {
          cnt++;
          tr[father[b]].val = 1;
          update(father[b]);
          mi = min(mi, num[b]);
          ma = max(ma, num[b]);
        } else {
          if (num[b] >= mi) {
            tr[father[b]].val = 1;
            update(father[b]);
            tr[father[mp[mi]]].val = 0;
            update(father[mp[mi]]);
            mi = min(mi, num[b]);
            ma = max(ma, num[b]);
          } else
            continue;
        }
      } else if (a == 2) {
        query(1, b, b);
        if (sum == 1)
          puts("YES");
        else
          puts("NO");
      }
    }
  }
  return 0;
}
