#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 5;

#define ll long long
pair<ll, ll> a[maxn], tmp;

ll c[maxn];
ll dp[maxn];

bool cmp(pair<ll, ll> A, pair<ll, ll> B) {
    return A.first * (B.second + 1) > B.first * (A.second + 1);
}

void solve() {
    int n;
    ll T;
    scanf("%d %lld", &n, &T);
    int cnt1 = 0, cnt2 = 0;
    for (int i = 1; i <= n; ++i) {
        scanf("%lld %lld", &tmp.first, &tmp.second);
        if (tmp.first == 0) c[cnt2++] = tmp.second + 1;
        else a[cnt1++] = tmp;
    }

    sort(c, c + cnt2);
    sort(a, a + cnt1, cmp);
    for (int i = 1; i <= 30; ++i) dp[i] = T + 1;
    dp[0] = 0;
    for (int i = 1; i <= cnt2 - 1; ++i) {
        c[i] += c[i - 1];
    }

    for (int i = 0; i <= cnt1 - 1; ++i) {
        for (int j = 30; j >= 1; --j) {
            dp[j] = min(dp[j], (a[i].first + 1) * (dp[j - 1] + 1) + a[i].second);
        }
    }

    int ans = 0;
    for (int i = 0; i <= 30; ++i) {
        if (dp[i] > T) continue;
        int add = 0;
        if (cnt2) {
            add = upper_bound(c, c + cnt2, T - dp[i]) - c;
        }
        ans = max(ans, i + add);
    }
    printf("%d\n", ans);
    return ;

}

int main() {
    solve();
    return 0;
}