提交记录
#include<bits/stdc++.h>
#define re register
#define ui unsigned int
#define ul unsigned long long
#define il inline
#define min(a,b) a<b?a:b
using namespace std;
namespace IO {
const ui MAXSIZE = 1 ;
char buf[MAXSIZE], *p1, *p2;
#define gc() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, MAXSIZE, stdin), p1 == p2) ? EOF: *p1++)
il ui read(){
re ui res=0; re char c=gc();
while(!isdigit(c)) c=gc();
while(isdigit(c)) res=(res<<1)+(res<<3)+(c^48),c=gc();
return res;
}
il void write(re ul x){
if(x>9) write(x/10);
putchar(x-(x/10)*10+48); return;
}
} using namespace IO;
const ui MAXN=2e6+10,MAXK=1e4+10;
ui a[MAXN],idx[MAXN],sum[MAXN];
vector<ui> v[MAXK];
ul ret=0;
ui n,k,p,block,x;
il bool query(re ui l,re ui r){
re ui ans=1e9;
re ui bl=idx[l],br=idx[r];
if(bl==br){
for(re ui i=l;i<=r;++i){
ans=min(ans,a[i]);
if(ans<=p) return 1;
}return ans<=p;
}for(re ui i=l;idx[i]==bl;++i){
ans=min(ans,a[i]); if(ans<=p) return 1;
}for(re ui i=bl+1;i<br;++i){
ans=min(ans,sum[i]); if(ans<=p) return 1;
}for(re ui i=r;idx[i]==br;--i){
ans=min(ans,a[i]); if(ans<=p) return 1;
}return ans<=p;
}
signed main(){
for(re ui i=1;i<=MAXN-10;++i) sum[i]=1e9;
n=read(),k=read(),p=read(); block=sqrt(n);
for(re ui 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 ui i=0;i<k;++i){
re ui siz=v[i].size();
if(siz<2) continue;
for(re ui j=0;j<siz;++j){
for(re ui kk=1;j+kk<siz;++kk){
if(query(v[i][j],v[i][j+kk])){
ret+=siz-(j+kk); break;
}
}
}
}write(ret);
return 0;
}