#include<bits/stdc++.h>
using namespace std;
using ll = long long ; 
ll a[4][3000006] ; 
ll get(ll cnt , ll n)  ;
int main() {
    ios::sync_with_stdio(false) ;
    cin.tie(0) ;
    cin.tie(0) ;
    ll n , k ;
    cin >> n >> k ;
    for(int i = 1 ; i <= n ; i++) a[1][i] = 1;
    for(int i = 2 ;i <= 3 ; i++) {
        for(int j = 1 ; j <= n * i ; j++) a[i-1][j] += a[i-1][j-1] ; 
        for(int j = i ; j <= i * n ; j++) {
            if(j >= n + 1) a[i][j] += a[i-1][j-1] - a[i-1][j-n-1] ;
            else a[i][j] += a[i-1][j-1] ;  
        }
    } 
    ll x = 1, y = 1 , z = 1 ; 
    ll tar ;
    for(int i = 3 ; i <= n * 3 ; i++) {
        if(k <= a[3][i]) {tar = i ; break ;} 
        else k -= a[3][i] ; 
    }
    ll i ;
    for( i = 1 ; i <= n ; i++) {
        if(tar - i > 2 * n) continue ; 
        ll x1 = get(tar - i , n) ;
        if(k > x1) k -= x1 ; 
        else break ; 
    }
    x = tar - i - 2 ; 
    if(z + x > n) {
        x -= n - z ; 
        z = n ; 
        y += x ; 
    } else z += x ; 
    y += k - 1  ; z -= k - 1  ; 
    cout << i << ' ' << y << ' ' << z << endl ;
}
ll get(ll cnt , ll n) {
    cnt -= 2 ; 
    ll i = 1 , j = 1 ;
    if(cnt + 1 > n) {
        cnt -= n - j ; 
        i += cnt ; 
        j = n ; 
    } else j += cnt ; 
    return min(n + 1 - i , j) ; 
}
#include <iostream>
#include <vector>
#pragma GCC target("avx")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
using namespace std;
using ll=long long;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
// union by size + path having
class UnionFind {
public:
    vector <ll> par; // 各元の親を表す配列
    vector <ll> siz; // 素集合のサイズを表す配列(1 で初期化)

    // Constructor
    UnionFind(ll sz_): par(sz_), siz(sz_, 1LL) {
        for (ll i = 0; i < sz_; ++i) par[i] = i; // 初期では親は自分自身
    }
    void init(ll sz_) {
        par.resize(sz_);
        siz.assign(sz_, 1LL);  // resize だとなぜか初期化されなかった
        for (ll i = 0; i < sz_; ++i) par[i] = i; // 初期では親は自分自身
    }

    // Member Function
    // Find
    ll root(ll x) { // 根の検索
        while (par[x] != x) {
            x = par[x] = par[par[x]]; // x の親の親を x の親とする
        }
        return x;
    }

    // Union(Unite, Merge)
    bool merge(ll x, ll y) {
        x = root(x);
        y = root(y);
        if (x == y) return false;
        // merge technique（データ構造をマージするテク．小を大にくっつける）
        if (siz[x] < siz[y]) swap(x, y);
        siz[x] += siz[y];
        par[y] = x;
        return true;
    }

    bool same(ll x, ll y) { // 連結判定
        return root(x) == root(y);
    }

    ll size(ll x) { // 素集合のサイズ
        return siz[root(x)];
    }
};
int main(){
  long long n,x;
  cin>>n>>x;
  long long k=0;
  long long X=x*100;
  for(int i=1;i<=n;i++){
    long long a,b;
    cin>>a>>b;
    k+=a*b;
    if(k>X){
      cout<<i;
      break;
    }
    if(i==n && k<=X){
      cout<<-1;
    }
  }
}