two pointers
#include<bits/stdc++.h>
using namespace std;
#define LOCAL
#define ll long long int
#define inf 0x3f3f3f3f
#define mset(a,b) memset(a,b,sizeof(a))
const int maxn=1e5+5;
set<int> s;
vector<int> ts[maxn];
int n,k,d;
bool twoPointers(int x){
int s=0,t=0,sum=0;
int n=ts[x].size();
sort(ts[x].begin(),ts[x].end());
for(;;){
while(t<n&&sum<k){
sum++;
t++;
}
if(sum<k) return false;
if(ts[x][t-1]-ts[x][s]<d)
return true;
else {
s++;
sum--;
}
}
}
void solve(){
cin>>n>>d>>k;
for(int i=0;i<n;i++)
{
int tt,id;
cin>>tt>>id;
ts[id].push_back(tt);
s.insert(id);
}
int sz=s.size();
for(int i=0;i<sz;i++){
set<int>::iterator it=s.begin();
int x=*it;
if(twoPointers(x)){
cout<<x<<"\n";
}
s.erase(it);
}
}
int main(){
#ifdef LOCAL
freopen("in.in","r",stdin);
#endif
solve();
return 0;
}