## coding: UTF-8
from itertools import permutations, combinations,combinations_with_replacement,product
s = input().split()
t = [int(p) for p in s]
#print(t[0])
#print(t[1])
D = t[0] #点数の種類数(D * 100点まである)
G = t[1] #ゴールとなる得点数
number_bonus = [] #要素D個の[問題数、ボーナス]のセット

for i in range(D):
    u = input().split()
    v = [int(p) for p in u]
    number_bonus.append(v)

#print('D:{}'.format(D))
#print('G:{}'.format(G))
#print('number_bonus:{}'.format(number_bonus))

problem_counter = 0 #問題数を数える
a=list(product([0,1],repeat=D)) #組み合わせを全パターン出してくれる D=10なら[0, 0, 1, 1, 0, 1, 0, 1, 0, 1]みたいな感じで出してくれる。
#print(a) #len(a) = 2^D


counter = [] #a全てのパターンについて問題数を返して格納する
for i in range(len(a)): #a全てのパターンについて試す
    #print('i:{}'.format(i))
    getpoint = 0 #獲得点数を毎回初期化する
    problem_counter = 0 #問題数数え上げを毎回初期化する
    #要素が0のうちindexが最大なもののindexをとる
    max_0_index = -1
    for k in range(D):
        if(a[i][k] == 0):
            max_0_index = k
    #print('i:{},max_0_index:{}'.format(i, max_0_index))
    for j in range(D):
        if(a[i][j] == 1):
            getpoint += (j+1) * 100 * number_bonus[j][0] +  number_bonus[j][1]#(j+1)*100点問題をnumber_bonus[j][0]問といて,number_bonus[j][1]点のボーナスをもらう
            problem_counter += number_bonus[j][0]
    #print('i:{},allgetpoint:{},problem_counter:{}'.format(i,getpoint,problem_counter))
    if(getpoint >= G):
        counter.append(problem_counter) #Gを超えていれば「条件を満たす問題数」として出力（最小値を取るので大きな値を取っちゃっても問題ない）
        #print('problem_counter:{}問で条件を満たしました'.format(problem_counter))
#    if(getpoint == G):
#        counter.append(problem_counter) #Gちょうどだったらここで終了して問題数を格納
    if(getpoint < G):
        #max_0_indexの問題をGを超えるまでとく
        #(max_0_index + 1) * 100点の問題
        #問題数:number_bonus[max_0_index][0]
        #ボーナス特典は関係ない（全部解いて初めて0を
        for i in range(number_bonus[max_0_index][0]):
            if(getpoint >= G):
                continue #Gを超えたらもう足さない
            getpoint += (max_0_index + 1) * 100
            problem_counter += 1
        #ループを終えた後にGを超えたか確認する
        if(getpoint >= G):
            counter.append(problem_counter)
            #print('problem_counter:{}問で条件を満たしました'.format(problem_counter))
#print(counter)

print(min(counter))







'''
#解く順番を指定するリストを順列で生成
p = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
order = list(permutations(p[:D], D)) #D!個生成される
print(order)

def all_solve(haiten, point, bonus):
    return haiten * point + bonus


getpoint = 0
problem_counter = 0
index = 0
order_index = 0
while True:
    point_bonus_index = int(order[index][order_index] - 1)
    print(point_bonus_index)
    if(getpoint + all_solve(order[index][order_index] * 100, point_bonus[point_bonus_index][0], point_bonus[point_bonus_index][1])   <  G ):
        getpoint+=all_solve(order[index][order_index] * 100, point_bonus[point_bonus_index][0], point_bonus[point_bonus_index][1])
        problem_counter +=point_bonus[point_bonus_index][0]
        order_index+=1
        print('getpoint:{}, problem_counter:{}'.format(getpoint,problem_counter))
    else:
        break
print('getpoint:{}, problem_counter:{}'.format(getpoint,problem_counter))
'''
'''
alpha = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
haiten_list = [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000]
#use_alpha = alpha[:D]
#print(use_alpha)
a = list(permutations(haiten_list[:D], D))
#print(a)


def all_solve(haiten, p_i, c_i):
    return haiten * p_i + c_i
#print(haiten_list[2], p_c_[2][0], p_c_[2][1])
#print(all_solve(haiten_list[2], p_c_[2][0], p_c_[2][1]))

def count_problem(solve_list, G):
    getpoint = 0
    counter = 0
    i = 0
    while getpoint+all_solve(solve_list[i], p_c_[int(solve_list[i]/100.0)-1][0], p_c_[int(solve_list[i]/100.0)-1][1]) < G:
        getpoint += all_solve(solve_list[i])
        counter += p_c_[int(solve_list[i]/100)-1][0]
        print(counter)
count_problem(a, G)
'''

Measured memory_bytes: 3192