// util
let scanInt () = stdin.ReadLine() |> int
let scanInts () = stdin.ReadLine().Split() |> Array.map int
let scanIntML n = [ for i in 1..n -> scanInt () ]
let scanIntsML n = [ for i in 1..n -> scanInts () ]
let frceil a b = a/b + (if a % b = 0 then 0 else 1)
let rec powerset = function
  | [] -> [[]]
  | x::xs -> let ps = powerset xs in ps @ List.map (List.append [x]) ps

// main
let [|D;G|] = scanInts ()

let alltup =
  scanIntsML D
  |> List.mapi (fun i a -> ((i+1)*100, a.[0], a.[1])) // (point, num, bonus)
  |> List.rev // （ボーナス抜きでの）コスパで並べる

// 目標点に対して中途半端に回答できるならその回数(cnt は累積値)
let tryCount cnt tgt (p,n,_) =
  match tgt - p*(n-1) with
    | x when x > 0 -> None
    | _ -> Some (cnt + (frceil tgt p))

// 完全回答組が与えられたとき 中途を（必要があれば）一つ選んで総回数を返す
let trySelect ctups =
  let cnt = List.sumBy (fun (_,n,_) -> n) ctups
  let scr = List.sumBy (fun (p,n,b) -> b+p*n) ctups
  match G - scr with
    | 0 -> Some(cnt) // びったりなので中途は選ばなくてよい
    | x when x < 0 -> None // 考慮外としてよい
    | x ->
        alltup
        |> List.filter (fun t -> not (List.contains t ctups)) 
        |> List.tryHead // コスパでソート済みなので先頭が中途。
        |> function
            | None -> None
            | Some t ->
                tryCount cnt x t

alltup
|> powerset
|> List.map trySelect
|> List.choose id
|> List.min
|> printfn "%d"