#include<iostream>
#include<algorithm>
#include <string>
#include <vector>
#include<sstream>
using namespace std;
void InsertSort(int a[], int l, int r) {
for (int i = l + 1; i <= r; i++) {
int num = a[i];
int j = i;
while (j - 1 >= l && num < a[j - 1]) {
a[j] = a[j - 1];
j--;
}
a[j] = num;
}
}
int Find(int a[], int l, int r, int key) {
for (int i = l; i <= r; i++) {
if (a[i] == key) return i;
}
}
int BFPRT(int a[], int l, int r) {
int k = 0;
int i = l;
while (i + 4 <= r) {
InsertSort(a, i, i + 4);
k++;
swap(a[l + k - 1], a[i + 2]);
i += 5;
}
if (i <= r) {
InsertSort(a, i, r);
k++;
swap(a[l + k - 1], a[i + (r - i + 1) / 2]);
}
if (k == 1) return a[l];
else return BFPRT(a, l, l + k - 1);
}
int QSelect(int a[], int l, int r, int K) {
if (l > r) return 0;
int i = l;
int j = r;
int key = BFPRT(a, l, r);
int k = Find(a, l, r, key);
a[k] = a[l];
while (i < j) {
while (i < j && a[j] >= key) j--;
a[i] = a[j];
while (i < j && a[i] <= key) i++;
a[j] = a[i];
}
a[i] = key;
if (i + 1 == K) return a[i];
else if (K < i + 1)
return QSelect(a, l, i - 1, K);
else return QSelect(a,i + 1, r, K);
}
void Qsort(int a[], int l, int r)
{
if (l > r)
return ;
int i = l;
int j = r;
int key = BFPRT(a, l, r);
int k = Find(a, l, r, key);
a[k] = a[l];
while (i < j) {
while (i < j && a[j] >= key) j--;
a[i] = a[j];
while (i < j && a[i] <= key) i++;
a[j] = a[i];
}
a[i] = key;
Qsort(a, l, i - 1);
Qsort(a, i+1, r);
}
int main() {
string s;
string temp;
getline(cin, s);
vector<int> vec;
int tempInt;
for(auto &c:s)
{
if (c >= '0' && c <= '9')
temp += c;
else
{
if(!temp.empty())
{
istringstream is(temp);
is >> tempInt;
vec.push_back(tempInt);
temp.clear();
}
}
}
int* a;
a = new int[vec.size()];
for(int i=0;i<vec.size();++i)
{
a[i] = vec[i];
}
int n = vec.size();
int k;
cin >> k;
QSelect(a, 0, n - 1, k);
Qsort(a, n - k, n - 1);
for (int i = n-1; i >= n-k; --i)
{
cout << a[i];
if (i != n - k)
cout << " ";
}
}