#include <stdio.h>
#include <string.h>
struct ListNode                             //结构体和重命名
{
    int m_nKey;
    struct ListNode* m_pNext;
};
typedef struct ListNode Node;

Node* creatListNode()                  //申请结点
{
    Node* temp=(Node*)malloc(sizeof(Node));
    return temp;
};

int main() {
    int n=0;   
    int x=0,i=1;int k=0;        //n 长度,x 存结点值,k 题中所给.
    Node* rear=NULL,*temp=NULL,*head=NULL;    //头结点,temp暂存申请节点,rear存上一结点

while( scanf("%d\n",&n)!=EOF){                   //n后等待输入
    i=1;rear=temp=head=NULL;                     //要重新赋值,多组数据会触发
    while((scanf("%d",&x)!=EOF)&&i<=n){           //结点序列输入,存储
        if(i<n){
         scanf(" ");                    //空格
        }
         temp=creatListNode();           //申请结点并赋值
         temp->m_nKey=x;
         temp->m_pNext=NULL;
         if(head==NULL){            //第一次就给head
            head=temp;
         }
         if(rear==NULL){              //第一次也给尾巴
            rear=temp;
         }else {
            rear->m_pNext=temp;        //尾巴用来连接上次和刚申请的结点
            rear=temp;
         };
         i++;                          //最后一次i会>n;
         if(i>n) break;                //直接跳出,
        // printf("%d",temp->m_nKey);
    }
    n=0;                                 //忘记长度
    scanf("\n%d\n",&k);                      //输入K

   //有链表head首元结点,rear尾指针,需要的倒数第K个,忘记了长度n;

    i=0;
    temp=head;
    while(temp!=NULL){
        temp=temp->m_pNext;
        i++;
    }
    n=i;                                    //求出长度n了
                                             //  printf("%d",k);检查k
    i=0;
    temp=head;
    while(i<n-k){
        temp=temp->m_pNext;
        i++;
    }
    x=temp->m_nKey;
    printf("%d\n",x);                      //找出了一组要求的。

    temp=head;                               //我很闲,去释放了申请的结点
    while(temp!=NULL){
        rear=temp;
        temp=temp->m_pNext;
        free(rear);
        rear=NULL;
    }

   }                                      //下一组开始循环
    return 0;
}