#include<bits/stdc++.h>

using namespace std;

#define fastio ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define pr pair<long long,long long>
#define mp make_pair
#define pb push_back
#define eb emplace_back
#define fow(i,a,b,c) for(long long i=a;i<=b;i+=c)
#define bck(i,a,b,c) for(long long i=a;i>=b;i-=c)
#define F first
#define S second
#define loop int tests;cin>>tests;while(tests--)
#define full(x) (x).begin(),(x).end()
#define ubd(x,y) (upper_bound(full(x),y)-x.begin())
#define N (200006)
#define inf ((long long)1e18)

vector<pr> shop;
vector<long long> zero;
long long n,t;
long long dp[N][31],tmp[31];

int main()
{
	fastio;
	cin>>n>>t;
	shop.resize(n);
	fow(i,0,n-1,1)
		cin>>shop[i].F>>shop[i].S;
	sort(full(shop),[](pr x,pr y){return x.F*(y.S+1)>y.F*(x.S+1);});
	while(shop.size()!=0&&shop.back().F==0)
	{
		zero.eb(shop.back().S);
		shop.pop_back();
	}
	sort(full(zero));
	fow(i,1,(long long)(zero.size())-1,1)
		zero[i]+=zero[i-1]+1;
	fow(i,1,30,1)
		tmp[i]=inf;
	fow(i,0,(long long)(shop.size())-1,1)
	{
		bck(j,30,1,1)
		{
			if(tmp[j-1]<=t)
				dp[i][j]=tmp[j-1]+1+shop[i].F*(tmp[j-1]+1)+shop[i].S;
			else dp[i][j]=inf;
			tmp[j]=min(tmp[j],dp[i][j]);
		}
	}
	long long output=0;
	fow(i,0,30,1)
		if(tmp[i]<=t)
		{
			output=max(output,i+ubd(zero,t-tmp[i]-1));
		}
	cout<<output<<"\n";
}

