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>
struct solve {
  int status;
  int value;
} arr[250000];
int compare(struct solve *a, struct solve *b) { return a->value - b->value; }
int find_smallest(int size) {
  int i;
  int min = INT_MAX;
  int min_index;
  for (i = 0; i < size; i++) {
    if (arr[i].value < min && arr[i].status == 1) {
      min = arr[i].value;
      min_index = i;
    }
  }
  return min_index;
}
int main() {
  int a, b, c, d, e, f, g;
  scanf("%d%d%d", &a, &b, &c);
  int i;
  int added = 0;
  for (i = 0; i < a; i++) {
    scanf("%d", &arr[i + 1].value);
  }
  for (i = 0; i < c; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    if (x == 2) {
      if (arr[y].status == 1) {
        printf("YES\n");
      } else
        printf("NO\n");
    }
    if (x == 1 && added != b) {
      arr[y].status = 1;
      added++;
    } else if (x == 1 && added == b) {
      int removal = find_smallest(a);
      arr[removal].status = 0;
      arr[y].status = 1;
    }
  }
}
