#include <stdio.h>

//第x小的数可以用小根堆,先用较少的个数建立一个小根堆,然后插入新的结点,最终把数列插入完,然后用层次遍历的方法,遍历到第K即可
//但是如果选取的根堆规模不能够满足k,会找不到的,所以最笨的办法就是用n建立根堆

int in_num[1001];
int temp;


void HeadAdjust(int A[],int m,int len)
{
    //以元素m为根结点
    A[0] = A[m]; //把0位空出来用来交换
    for(int i=2*m;i<len;i*=2)
    {
        if(i<len&&A[i]>A[i+1])
        {
            i++;
        }
        if(A[0]<=A[i])
        {
            break; //已经符合小根堆了
        }
        else
        {
            A[m] = A[i];
            m=i; //继续往下筛选
        }
    }
    A[m] = A[0];
}

void BuildMinHeap(int A[],int len)
{
    for(int i=len/2;i>0;i--)
    {
        HeadAdjust(A,i,len);
    }
}

void HeadSort(int A[],int len)
{
    BuildMinHeap(A,len);
    for(int i=len;i>1;i--)
    {
        temp = A[i];
        A[i] = A[1];
        A[1] = temp; //相当于输出了堆顶元素
        HeadAdjust(A,1, i-1);
    }
}


int main() {
    int count,k;
    while(scanf("%d",&count) != EOF)
    {
        for(int i=1;i<=count;i++)
        {
            scanf("%d",&in_num[i]);
        }
        HeadSort(in_num,count);
        scanf("%d",&k);
        //现在要在有序序列里面去重
        int dest = count,cur=count-1;
        while(cur>0)
        {
            if(in_num[cur] != in_num[dest])
            {
                in_num[--dest] = in_num[cur--];
            }
            else
            {
                cur--;
            }
        }
        printf("%d",in_num[count-k+1]);
    }
    return 0;
}