import java.util.Arrays;
import java.util.PriorityQueue;
import java.util.Scanner;
public class 小z的AK计划 {
static final int N = 100010;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
Long m = in.nextLong();
Ti[] tis = new Ti[N];
for(int i = 1;i<=n;i++){
Ti ttt = new Ti();
ttt.x = in.nextLong();
ttt.t = in.nextLong();
tis[i] = ttt;
}
Arrays.sort(tis,1,n+1);
long ti = 0;
PriorityQueue<Long> q = new PriorityQueue<>((a,b)->Long.compare(b,a));
for(int i = 1;i<=n;i++){
if(m-tis[i].x>=ti+tis[i].t){
q.add(tis[i].t);
ti+=tis[i].t;
}else {
if(!q.isEmpty()&&ti-q.peek()+tis[i].t<m-tis[i].x){
ti = ti-q.peek()+tis[i].t;
q.poll();
q.add(tis[i].t);
}
}
}
System.out.println(q.size());
}
}
class Ti implements Comparable<Ti>{
long x;
long t;
@Override
public int compareTo(Ti o) {
if(this.x!=o.x)return Long.compare(this.x,o.x);
return Long.compare(this.t,o.t);
}
}
我的思路是,按照x排序后一直往一个方向走,如果时间够的话就把t加入大根堆,如果不够的话看看能不能把堆顶取出来,再看时间够不够,够的话,就弹出堆顶,然后在加入这个到堆顶,最后堆里元素的数量就是答案,不知道为什么错了。