#include <bits/stdc++.h>
using namespace std;
#define int long long
const int INF=1e9;
typedef pair<int,int> P;
int dp[223456][35];//dp[i][j]:i番目まででj個行った時の最小タイム
template<typename T>
void chmax(T &a,T b){
  if(a<b)a=b;
}
template<typename T>
void chmin(T &a,T b){
  if(a>b)a=b;
}
bool cmp(P u,P v){
  return u.first*(v.second+1)>v.first*(u.second+1);
}

signed main(){
  int n,t;cin>>n>>t;
  vector<P> v;
  vector<int> w;
  w.push_back(0);
  for(int i=0;i<n;i++){
    int a,b;cin>>a>>b;if(a+b>t)continue;
    if(a)v.push_back(P(a,b));
    else w.push_back(b);
  }
  sort(v.begin(),v.end(),cmp);
  sort(w.begin(),w.end());
  for(int i=0;i<223456;i++)for(int j=0;j<30;j++)dp[i][j]=INF+10;
  dp[0][0]=0;
  n=v.size();
  for(int i=0;i<n;i++){
    int a=v[i].first,b=v[i].second;
    for(int j=0;j<30;j++){
      if(dp[i][j]>t)continue;
      chmin(dp[i+1][j],dp[i][j]);
      chmin(dp[i+1][j+1],dp[i][j]+1+(dp[i][j]+1)*a+b);
    }
  }
  for(int i=1;i<w.size();i++)w[i]+=w[i-1]+1;
  int ans=0;
  for(int j=0;j<30;j++){
    int res=t-dp[n][j];
    if(res<0)continue;
    int l=0,r=w.size();
    while(r-l>1){
      int mid=(r+l)>>1;
      if(w[mid]<=res)l=mid;
      else r=mid;
    }
    chmax(ans,j+l);
  }
  cout<<ans<<endl;
}
