#include <iostream>
using namespace std;
#include <vector>
#include <deque>
#include <sstream>
int main() {
    //单调双端队列,维护一个单调递减的队列,每次新元素p从队尾入队,将队列中小于p的元素全部从队尾出队
    //当剩余最后k个元素时,每进行一次入队操作后,就弹出队首元素加入答案中
    vector<int> players;
    string line;
    getline(cin,line);
    stringstream ss(line);
    int num=0;
    while(ss >> num)
    {
        players.push_back(num);
    }
    //输入错误
    if(!ss.eof())
    {
        cout << "error";
        return 0;
    }
    int k=0;
    cin >> k;

    //遍历原数组,维护一个单调队列
    int len = players.size();
    deque<int> best;
    for(int i=0; i<len; i++)
    {
        int p=players[i];
        //将新元素p入队,同时弹出队列中所有小于p的元素
        while( !best.empty() && best.back() < p)
        {
            best.pop_back();
        }
        best.push_back(p);
        //如果此时剩余元素小于k,则弹出队首元素加入答案
        if(len-1-i < k)
        {
            cout << best.front() << ' ';
            best.pop_front();
        }
    }
    return 0;
}
// 64 位输出请用 printf("%lld")