#include<iostream>
#include<algorithm>
#include<vector>
#include<stdio.h>
using namespace std;
int n,d,k;
vector<int>p;//存id
vector<int>pp[10005];//相当于结构体struct node
//{
// int t;
//}pp[10005];
int main()
{
cin>>n>>d>>k;
for(int i=0;i<n;i++)
{
int id,t;
cin>>t>>id;
p.push_back(id);
pp[id].push_back(t);
}
sort(p.begin(),p.end());
p.erase(unique(p.begin(),p.end()),p.end());//去重,删去重复元素
for(int i=0;i<p.size();i++)//对每一个id进行分析判断
{
int temp=p[i],zan=0,star,end1;
sort(pp[temp].begin(),pp[temp].end());
star=0,end1=pp[temp].size()-1;
zan=pp[temp].size();
while(star<end1)
{
if(pp[temp][end1]-pp[temp][star]<d&&zan>=k)
{
cout<<temp<<endl;
break;
}
else//还有一种情况,就是起点到终点的时间大于d,但是中间有符合条件的区间,所以还要逐渐缩小区间判断
{
if(pp[temp][star+1]-pp[temp][star]>pp[temp][end1]-pp[temp][end1-1])
star++;
else
end1--;
}
}
}
}