#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;
struct pogodjena {
    int polje;
    int brojPuta;
};

bool komparator(pogodjena a, pogodjena b) {
    return a.brojPuta >= b.brojPuta;
}

vector<pogodjena> polja;

int nadji(int brojPolja) {
    int l = 0;
    int d = polja.size()-1;
    while (d >= l && d != 0) {
        int s = (l + d) / 2;
        if (polja[s].polje > brojPolja) {
            d = s-1;
        } else if (polja[s].polje < brojPolja) {
            l = s+1;
        } else {
            return s;
        }
    }

    return -1;
}

int main() {
    int n, k;
    cin >> n >> k;

    for (int i = 0; i < n; i++) {
        int ulaz;
        cin >> ulaz;

        int pozicija = nadji(ulaz);
        if (pozicija == -1) {
            pogodjena pogodak;
            pogodak.polje = ulaz;
            pogodak.brojPuta = 1;
            polja.push_back(pogodak);
        } else {
            polja[pozicija].brojPuta= polja[pozicija].brojPuta + 1;
        }


        sort(polja.begin(), polja.end(), komparator);
    }

    int counter = 0;
    //string izlaz = "";
    for (int i = 0; i < polja.size(); i++) {
        if (polja[i].brojPuta >= k) {
            counter++;
        } else {
            break;
        }
    }

    cout << counter << endl;
    for (int i = 0; i < polja.size(); i++) {
        if (polja[i].brojPuta >= k) {
            cout << polja[i].polje;
            counter++;
        } else {
            break;
        }

        cout << " ";
    }
    return 0;
}