#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PII;
const int maxn=200020,K=30;
#define MP make_pair
#define PB push_back
#define lson o<<1,l,mid
#define rson o<<1|1,mid+1,r
#define FOR(i,a,b) for(int i=(a);i<=(b);i++)
#define ROF(i,a,b) for(int i=(a);i>=(b);i--)
#define MEM(x,v) memset(x,v,sizeof(x))
inline ll read(){
	char ch=getchar();ll x=0,f=0;
	while(ch<'0' || ch>'9') f|=ch=='-',ch=getchar();
	while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();
	return f?-x:x;
}
struct item{
	int a,b;
	bool operator<(const item &it)const{
		ll s1=1ll*(1-a)*it.b,s2=1ll*(1-it.a)*b;
		if(s1!=s2) return s1<s2;
		return b<it.b;
	}
}it[maxn];
int n,t,a[maxn],b[maxn],pos,ans,arr[maxn];
ll f[maxn][31];
int main(){
	n=read();t=read();
	FOR(i,1,n){
		it[i].a=read()+1;
		it[i].b=read()+it[i].a;
	}
	sort(it+1,it+n+1);
	FOR(i,1,n) a[i]=it[i].a,b[i]=it[i].b;
	FOR(i,0,n) FOR(j,0,K) f[i][j]=5e18;
	f[0][0]=0;
	ROF(i,n,0) if(a[i]!=1){pos=i+1;break;}
	arr[0]=0;
	FOR(i,1,n-pos+1) arr[i]=arr[i-1]+b[pos+i-1];
	FOR(i,1,pos-1) FOR(j,0,K){
		f[i][j]=f[i-1][j];
		if(j){
			ll s=f[i-1][j-1]*a[i]+b[i];
			if((s-b[i])/a[i]==f[i-1][j-1]) f[i][j]=min(f[i][j],s);
		}
	}
	FOR(i,0,K) FOR(j,0,n-pos+1) if((ull)f[pos-1][i]+arr[j]<=(ull)t) ans=max(ans,i+j);
	printf("%d\n",ans);
}
// swap(C, D)