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;
class _less {
 public:
  bool operator()(long long ob1, long long ob2) { return (ob1 > ob2); }
};
long long mas[(long long)1e6];
bool masb[(long long)1e6];
long long n, q, k, m, a, b, c, d;
string s, s1, s2, s3;
char ch, ch1;
map<long long, long long> levf;
set<long long, _less> onl;
set<long long> onll;
long long GCD(long long a, long long b) { return (!b ? a : GCD(b, a % b)); }
long long POW(long long a, long long b) {
  return (!b       ? 1
          : b == 1 ? a
          : b % 2  ? POW(a, b / 2) * POW(a, b / 2) * a
                   : POW(a, b / 2) * POW(a, b / 2));
}
int main() {
  cin.sync_with_stdio(false);
  cout.sync_with_stdio(false);
  cin >> n >> k >> q;
  for (int i = 0; i < n; i++) {
    cin >> m;
    levf[i + 1] = m;
  }
  for (int i = 0; i < q; i++) {
    cin >> a >> b;
    if (a == 1) {
      onl.insert(levf[b]);
      onll.insert(b);
    } else {
      cout << (((distance(onl.begin(), onl.lower_bound(levf[b])) < (k)) &&
                        ((onl.lower_bound(levf[b]) != onll.end()))
                    ? "YES\n"
                    : "NO\n"));
    }
  }
  return 0;
}
