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;
namespace Smart_IO_Stream {
template <class T_First, class T_Second>
ostream& operator<<(ostream& os, const pair<T_First, T_Second>& p) {
  os << p.first << " " << p.second;
  return os;
}
template <class T>
ostream& operator<<(ostream& os, const vector<T>& v) {
  for (int i = 0; i < v.size() - 1; i++) {
    os << v[i] << " ";
  }
  if (!v.empty()) {
    os << v[v.size() - 1];
  }
  return os;
}
template <class T>
ostream& operator<<(ostream& os, const vector<vector<T>>& v) {
  for (int i = 0; i < v.size() - 1; i++) {
    os << v[i];
    os << endl;
  }
  if (!v.empty()) {
    os << v[v.size() - 1];
  }
  return os;
}
template <class T_First, class T_Second>
istream& operator>>(istream& is, pair<T_First, T_Second>& p) {
  is >> p.first >> p.second;
  return is;
}
template <class T>
istream& operator>>(istream& is, vector<T>& v) {
  for (int i = 0; i < v.size(); i++) {
    is >> v[i];
  }
  return is;
}
template <class T>
istream& operator,(istream& is, T& obj) {
  is >> obj;
  return is;
}
template <class T>
ostream& operator,(ostream& os, const T& obj) {
  return (os << obj << " ");
}
enum OutSymb {
  nl,
  ptr,
};
ostream& operator,(ostream& os, OutSymb s) {
  switch (s) {
    case nl:
      os << endl;
      break;
    case ptr:
      os << "-> ";
      break;
    default:
      break;
  }
  return os;
}
}  // namespace Smart_IO_Stream
void set_accuracy(int accure) { cout << setprecision(accure) << fixed; }
namespace defython {
template <class T>
long long sum(vector<T>& v) {
  long long rez = 0;
  for (auto& first : v) {
    rez += first;
  }
  return rez;
}
template <class T>
T max(vector<T>& v) {
  if (v.size() == 0) {
    return NULL;
  }
  T assume_max = v[0];
  for (auto& first : v) {
    if (assume_max < first) {
      assume_max = first;
    }
  }
  return assume_max;
}
}  // namespace defython
namespace typedefs {}
using namespace Smart_IO_Stream;
using namespace typedefs;
int main(int argc, char* argv[]) {
  int n, k, q;
  cin, n, k, q;
  vector<int> friend_factor(n);
  cin >> friend_factor;
  auto cmp = [](pair<int, int> a, pair<int, int> b) {
    return a.second < b.second;
  };
  priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(cmp)> deque(
      cmp);
  for (int query_id = 0; query_id < q; query_id++) {
    int qtype, id;
    cin, qtype, id;
    if (qtype == 1) {
      pair<int, int> p = make_pair(id - 1, friend_factor[id - 1]);
      deque.push(p);
    } else {
      id--;
      vector<pair<int, int>> deleted;
      bool find = false;
      for (int i = 0; i < k; i++) {
        if (deque.empty()) {
          break;
        }
        deleted.push_back(deque.top());
        deque.pop();
        if (deleted.back().first == id) {
          find = true;
          cout << "YES" << endl;
          break;
        }
      }
      if (!find) {
        cout << "NO" << endl;
      }
      for (pair<int, int> p : deleted) {
        deque.push(p);
      }
    }
  }
  return 0;
}
