import java.util.*;
public class Main {
public static void GreatestInWinK(int[] arr, int K) {
LinkedList<Integer> qi = new LinkedList<Integer>();
int i;
// step one
for (i = 0; i < K; i++) {
while (!qi.isEmpty() && arr[i] >= arr[qi.peekLast()]) {
qi.removeLast();
}
qi.addLast(i);
}
// step two
for (; i < arr.length; i++) {
System.out.print(arr[qi.peek()] + " ");
while (!qi.isEmpty() && qi.peek() <= i - K) {
qi.removeFirst();
}
while (!qi.isEmpty() && arr[i] >= arr[qi.peekLast()]) {
qi.removeLast();
}
qi.addLast(i);
}
System.out.print(arr[qi.peek()] + " ");
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[] arr = new int[N];
for (int i = 0; i < N; i++) {
arr[i] = sc.nextInt();
}
int K = sc.nextInt();
GreatestInWinK(arr, K);
}
}