// I think of what the world could be, A vision of the one I see, A million dreams is all it's gonna take

#include<bits/stdc++.h>

#define F first
#define S second
#define PB push_back
#define sz(s) int((s).size())
#define bit(n,k) (((n)>>(k))&1)

using namespace std;

typedef long long ll;
typedef pair<int,int> pii;

const int maxn = 2e5 + 10, mod = 1e9 + 7, inf = 1e9 + 10;

int a[maxn], b[maxn], arr[maxn];
vector<ll> vec;
ll dp[40];

int main(){
    ios_base::sync_with_stdio(false); cin.tie(0); cout.tie();

    int n, t;
    cin >> n >> t;
    for(int i = 0; i < n; i++){
	cin >> a[i] >> b[i];
	a[i]++;
	b[i]+= a[i];	
    }
    for(int i = 0; i < n; i++){
	if(a[i] == 1){
	    vec.PB(b[i]);
	    swap(a[i], a[n-1]);
	    swap(b[i], b[n-1]);
	    --n;
	    --i;
	}
    }
    sort(vec.begin(), vec.end());
    for(int i = 1; i < sz(vec); i++)
	vec[i]+= vec[i-1];
    iota(arr, arr+n, 0);
    sort(arr, arr+n, [&](int i, int j){ return 1ll * b[j] * (a[i]-1) > 1ll * b[i] * (a[j]-1); });

    fill(dp, dp+40, inf);
    dp[0] = 0;    
    for(int i = 0; i < n; i++){
	for(int j = 39; j > 0; j--){
	    dp[j] = min(dp[j], 1ll * a[ arr[i] ] * dp[j-1] + b[ arr[i] ]);	    
	}
    }
    int ans = 0;
    for(int i = 0; i < 40; i++){
	int pt = 0;
	while(pt < sz(vec) && dp[i] + vec[pt] <= t)
	    pt++;
	if(dp[i] <= t)
	    ans = max(ans, i+pt);
    }
    return cout << ans << endl, 0;
}
