```cpp
#include<bits/stdc++.h>
#define re register
#define us unsigned
#define il inline
#define min(a,b) a<b?a:b
using namespace std;
const int MAXN=2e5+10;
us int a[MAXN],idx[MAXN],sum[MAXN];
vector<int> v[60];
us int n,k,p,block,x,ret=0;
il us int read(){
re us int res=0; re char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) res=(res<<1)+(res<<3)+c-48,c=getchar();
return res;
}
il void write(re us int x){
if(x>9) write(x/10);
putchar(x-(x/10)*10+48); return;
}
il us int query(re us int l,re us int r){
re us int ans=1e9;
re us int bl=idx[l],br=idx[r];
if(bl==br){
for(re us int i=l;i<=r;++i){
ans=min(ans,a[i]);
if(ans<=p) return 1;
}return ans<=p;
}for(re us int i=l;idx[i]==bl;++i){
ans=min(ans,a[i]); if(ans<=p) return 1;
}for(re us int i=bl+1;i<br;++i){
ans=min(ans,a[i]); if(ans<=p) return 1;
}for(re us int i=r;idx[i]==br;--i){
ans=min(ans,a[i]); if(ans<=p) return 1;
}return ans<=p;
}
int main(){
memset(sum,0x7f,sizeof(sum));
n=read(),k=read(),p=read(); block=8193;
for(re us int i=1;i<=n;++i){
x=read(),a[i]=read();
idx[i]=(i-1)/block+1;
sum[idx[i]]=min(sum[idx[i]],a[i]);
v[x].push_back(i);
}for(re us int i=0;i<k;++i){
re us int siz=v[i].size();
if(siz<2) continue;
for(re us int j=0;j<siz;++j){
for(re us int kk=1;j+kk<siz;++kk){
//printf("%d %d %d\n",v[i][j],v[i][j+kk],query(v[i][j],v[i][j+kk]));
ret+=query(v[i][j],v[i][j+kk]);
}
}
}
write(ret);
return 0;
}
```
by _ikun_newperson @ 2023-07-27 19:29:47