#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
	long int n;
	struct node *l,*r;
}node;
typedef node * tree;
tree maknod(long int d)
{
	tree t;
	t=(tree)malloc(sizeof(tree));
	t->n=d;
	t->l=t->r=NULL;
	return t;
}

tree ins(tree t,long int d)
{
	if(t==NULL)
	return maknod(d);
	else if(t->n > d)
	t->l=ins(t->l,d);
	else 
	t->r=ins(t->r,d);
	return t;
}
long int findmax(tree t)
{
	if(t->r==NULL)
	return (t->n);
	findmax(t->r);
}
tree del(tree t,long int d)
{
	if(t!=NULL)
	{
	if(t->n==d)
	{
		if(t->l==NULL && t->r==NULL)
		return NULL;
		if(t->l==NULL)
		return t->r;
		if(t->r==NULL)
		return t->l;
		t->n=findmax(t->l);
		t->l=del(t->l,t->n);
	}
	if(t->n>d)
	t->l=del(t->l,d);
	if(t->n<d)
	t->r=del(t->r,d);
}
return t;
}
long int print(tree t)
{
	if(t->r==NULL)
	return t->n;
	print(t->r);
}
int main()
{
long int num,k,i;
tree t=NULL;
scanf("%ld ",&num);
long int a[num];
for(i=0;i<num;i++)
scanf("%ld",&a[i]);
scanf("%ld",&k);
for(i=0;i<k;i++)
{
	t=ins(t,a[i]);
}
for(i=0;i<=num-k;i++)
{
if(i<num-k)
{
printf("%ld",print(t));
printf(" ");
}
else
printf("%ld",print(t));
t=del(t,a[i]);
ins(t,a[i+k]);
}
return 0;
}