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 {
  Node *L, *R;
  int x, cnt, y, id;
  Node(int _value, int _id) {
    id = _id;
    x = _value;
    L = R = NULL;
    y = rand();
    cnt = 1;
  }
};
typedef pair<Node*, Node*> pa;
int Cnt(Node* T) {
  if (T == NULL) return 0;
  return T->cnt;
}
void Recalc(Node* T) { T->cnt = Cnt(T->L) + Cnt(T->R) + 1; }
Node* treap_Merge(Node* L, Node* R) {
  if (L == NULL) {
    return R;
  }
  if (R == NULL) {
    return L;
  }
  if (L->y > R->y) {
    L->R = treap_Merge(L->R, R);
    Recalc(L);
    return L;
  } else {
    R->L = treap_Merge(L, R->L);
    Recalc(R);
    return R;
  }
}
pa Pair(Node* f, Node* s) {
  pa p;
  p.first = f;
  p.second = s;
  return p;
}
pa treap_Split(int key, Node* T) {
  if (T == NULL) {
    return Pair(NULL, NULL);
  }
  if (T->x >= key) {
    pa p = treap_Split(key, T->R);
    T->R = p.first;
    Recalc(T);
    return Pair(T, p.second);
  } else {
    pa p = treap_Split(key, T->L);
    T->L = p.second;
    Recalc(T);
    return Pair(p.first, T);
  }
}
void treap_Print(Node* T) {
  if (T == NULL) {
    return;
  }
  cout << T << ": (x = " << T->x << ", y = " << T->y << ", cnt = " << T->cnt
       << ", L = " << T->L << ", R = " << T->R << ")\n";
  treap_Print(T->L);
  treap_Print(T->R);
}
Node* treap_Insert(Node* root, Node* T) {
  pa p = treap_Split(T->x, root);
  root = treap_Merge(p.first, T);
  root = treap_Merge(root, p.second);
  return root;
}
int treap_Search(Node* T) {
  if (T == NULL) {
    return -1;
  }
  if (T->R == NULL) {
    return T->id;
  }
  return treap_Search(T->R);
}
int main() {
  srand(time(NULL));
  int n, k, q;
  cin >> n >> k >> q;
  int a[n];
  for (int i = 0; i < n; i++) {
    cin >> a[i];
  }
  int typ, id;
  Node* root = NULL;
  for (int i = 0; i < q; i++) {
    cin >> typ >> id;
    id--;
    if (typ == 1) {
      Node* F = new Node(a[id], id);
      root = treap_Insert(root, F);
    } else {
      pa p = treap_Split(a[id], root);
      int ID = treap_Search(p.first);
      if (ID == id && p.first->cnt <= k) {
        cout << "YES" << endl;
      } else {
        cout << "NO" << endl;
      }
      root = treap_Merge(p.first, p.second);
    }
  }
}
