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

import java.io.*;
import java.util.StringTokenizer;
import java.util.TreeSet;


public class Main {

    private static final double EPS = 1e-9;

    public static void main(String[] args) throws Exception {
        FastScanner fastScanner = new FastScanner(System.in);
        PrintWriter printWriter = new PrintWriter(System.out);
        Main main = new Main();
        main.solveB(fastScanner, printWriter);
        printWriter.close();

    }

    public void solveB(FastScanner scanner, PrintWriter writer) {
        int n = scanner.nextInt();
        int k = scanner.nextInt();
        int q = scanner.nextInt();

        int[] frnds = new int[n];
        for (int i = 0; i < n; i++)
            frnds[i] = scanner.nextInt();
        TreeSet<Integer> set = new TreeSet<>();
        while (q-- > 0) {
            int type = scanner.nextInt();
            int id = scanner.nextInt();

            switch (type) {
                case 1:
                    set.add(frnds[id-1]);
                    while (set.size() > k) {
                        int lowest = set.first();
                        set.remove(lowest);
                    }
                    break;
                case 2:
                    if (set.contains(frnds[id-1]))
                        writer.printf("YES\n");
                    else
                        writer.printf("NO\n");
                    break;
                default:
                    break;
            }
        }
    }

    public void solveA(FastScanner scanner, PrintWriter writer) {
        int n = scanner.nextInt();
        long c = scanner.nextInt();

        int p[] = new int[n];
        int t[] = new int[n];

        for (int i = 0; i < n; i++) p[i] = scanner.nextInt();
        for (int i = 0; i < n; i++) t[i] = scanner.nextInt();

        long time = 0;
        long limak = 0;
        for (int i = 0; i < n; i++) {
            time = time + t[i];
            limak += Math.max(0L, p[i] - c * time);
        }
        time = 0;
        long rade = 0;
        for (int i = n - 1; i >= 0; i--) {
            time = time + t[i];
            rade += Math.max(0L, p[i] - c * time);
        }

        if (limak > rade) {
            writer.printf("Limak\n");
        } else if (limak < rade) {
            writer.printf("Radewoosh\n");
        } else {
            writer.printf("Tie\n");
        }
    }


    static class Pair<U, V> {
        U x;
        V y;

        public Pair(U x, V y) {
            this.x = x;
            this.y = y;
        }
    }

    static class Point {
        long x, y;

        public Point(long x, long y) {
            this.x = x;
            this.y = y;
        }
    }

    long twoTimesAreaOfTriangle(Point a, Point b, Point c) {
        long ar = a.x * (b.y - c.y) + b.x * (c.y - a.y) + c.x * (a.y - b.y);
        if (ar < 0) ar = ar * (-1);
        return ar;
    }

    boolean isCisOnAB(Point a, Point b, Point c) {
        long cross = (c.y - a.y) * (b.x - a.x) - (c.x - a.x) * (b.y - a.y);
        if (cross != 0) return false;
        long dotproduct = (c.x - a.x) * (b.x - a.x) + (c.y - a.y) * (b.y - a.y);
        if (dotproduct < 0)
            return false;
        long squaredlengthba = (b.x - a.x) * (b.x - a.x) + (b.y - a.y) * (b.y - a.y);
        if (dotproduct > squaredlengthba) return false;

        return true;

    }


    static class FastScanner {
        private BufferedReader reader = null;
        private StringTokenizer tokenizer = null;

        public FastScanner(InputStream in) {
            reader = new BufferedReader(new InputStreamReader(in));
            tokenizer = null;
        }

        public String next() {
            if (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                    return next();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }

        public String nextLine() {
            if (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    return reader.readLine();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }

            return tokenizer.nextToken("\n");
        }

        public long nextLong() {
            return Long.parseLong(next());
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }

        public double nextDouble() {
            return Double.parseDouble(next());
        }

    }


}