D, G = list(map(int, input().split()))



def Base_10_to_n(X, n):

    X_dumy = X

    out = ''

    while X_dumy>0:

        out = str(X_dumy%n)+out

        X_dumy = int(X_dumy/n)

    return out



p = []

c = []

for _ in range(D):

	p_tmp, c_tmp = list(map(int,input().split()))

	p.append(p_tmp)

	c.append(c_tmp)

t = [(i+1)*100*p[i] + c[i] for i in range(D)]



ans = float("inf")



for i in range(2**D):

	flg = list(map(int, Base_10_to_n(i,2).rjust(D,"0")))

	tmp_score = sum([t[j] for j in range(D) if flg[j] == 1])

	cnt = sum([p[j] for j in range(D) if flg[j] == 1])



	if tmp_score < G:



		rst_max_q = max([j for j in range(D) if flg[j] == 0])



		rst_q_num = 0

		while rst_q_num < p[rst_max_q]:

			tmp_score += 100*(rst_max_q+1)

			rst_q_num += 1

			cnt += 1

			if tmp_score >= G:

				break



		if tmp_score < G:

			continue



	ans = min(ans, cnt)





print(ans)
import itertools



D,G = list(map(int, input().split()))

PC = [list(map(int, input().split())) for _ in range(D)]



P_list = list(range(D))

cnt = float('inf')



for i in range(D):

	for bonus in itertools.combinations(P_list, i):



		tmp_cnt = 0

		score = 0



		for j in bonus:

			score += PC[j][0] * 100 * (j+1) + PC[j][1]

			tmp_cnt += PC[j][0]



		res_max_p = max([k for k in range(D) if k not in bonus])

		res_score = G - score

		if res_score > 0:

			t = (-res_score//((res_max_p+1)*100)) * (-1) 

			if t < PC[res_max_p][0]:

				tmp_cnt += t

			else:

				continue



		cnt = min(cnt, tmp_cnt)



if cnt == float('inf'):

	cnt = sum([PC[j][0] for j in range(D)])



print(cnt)





D, G = list(map(int, input().split()))


def Base_10_to_n(X, n):
    X_dumy = X
    out = ""
    while X_dumy > 0:
        out = str(X_dumy % n) + out
        X_dumy = int(X_dumy / n)
    return out


p = []
c = []
for _ in range(D):
    p_tmp, c_tmp = list(map(int, input().split()))
    p.append(p_tmp)
    c.append(c_tmp)
t = [(i + 1) * 100 * p[i] + c[i] for i in range(D)]
ans = float("inf")
for i in range(2**D):
    flg = list(map(int, Base_10_to_n(i, 2).rjust(D, "0")))
    tmp_score = sum([t[j] for j in range(D) if flg[j] == 1])
    cnt = sum([p[j] for j in range(D) if flg[j] == 1])
    if tmp_score < G:
        rst_max_q = max([j for j in range(D) if flg[j] == 0])
        rst_q_num = 0
        while rst_q_num < p[rst_max_q]:
            tmp_score += 100 * (rst_max_q + 1)
            rst_q_num += 1
            cnt += 1
            if tmp_score >= G:
                break
        if tmp_score < G:
            continue
    ans = min(ans, cnt)
print(ans)

import itertools

D, G = list(map(int, input().split()))
PC = [list(map(int, input().split())) for _ in range(D)]
P_list = list(range(D))
cnt = float("inf")
for i in range(D):
    for bonus in itertools.combinations(P_list, i):
        tmp_cnt = 0
        score = 0
        for j in bonus:
            score += PC[j][0] * 100 * (j + 1) + PC[j][1]
            tmp_cnt += PC[j][0]
        res_max_p = max([k for k in range(D) if k not in bonus])
        res_score = G - score
        if res_score > 0:
            t = (-res_score // ((res_max_p + 1) * 100)) * (-1)
            if t < PC[res_max_p][0]:
                tmp_cnt += t
            else:
                continue
        cnt = min(cnt, tmp_cnt)
if cnt == float("inf"):
    cnt = sum([PC[j][0] for j in range(D)])
print(cnt)

+import itertools + - - -def Base_10_to_n(X, n): -    X_dumy = X -    out = "" -    while X_dumy > 0: -        out = str(X_dumy % n) + out -        X_dumy = int(X_dumy / n) -    return out - - -p = [] -c = [] -for _ in range(D): -    p_tmp, c_tmp = list(map(int, input().split())) -    p.append(p_tmp) -    c.append(c_tmp) -t = [(i + 1) * 100 * p[i] + c[i] for i in range(D)] -ans = float("inf") -for i in range(2**D): -    flg = list(map(int, Base_10_to_n(i, 2).rjust(D, "0"))) -    tmp_score = sum([t[j] for j in range(D) if flg[j] == 1]) -    cnt = sum([p[j] for j in range(D) if flg[j] == 1]) -    if tmp_score < G: -        rst_max_q = max([j for j in range(D) if flg[j] == 0]) -        rst_q_num = 0 -        while rst_q_num < p[rst_max_q]: -            tmp_score += 100 * (rst_max_q + 1) -            rst_q_num += 1 -            cnt += 1 -            if tmp_score >= G: -                break -        if tmp_score < G: -            continue -    ans = min(ans, cnt) -print(ans) +PC = [list(map(int, input().split())) for _ in range(D)] +P_list = list(range(D)) +cnt = float("inf") +for i in range(D): +    for bonus in itertools.combinations(P_list, i): +        tmp_cnt = 0 +        score = 0 +        for j in bonus: +            score += PC[j][0] * 100 * (j + 1) + PC[j][1] +            tmp_cnt += PC[j][0] +        res_max_p = max([k for k in range(D) if k not in bonus]) +        res_score = G - score +        if res_score > 0: +            t = (-res_score // ((res_max_p + 1) * 100)) * (-1) +            if t < PC[res_max_p][0]: +                tmp_cnt += t +            else: +                continue +        cnt = min(cnt, tmp_cnt) +if cnt == float("inf"): +    cnt = sum([PC[j][0] for j in range(D)]) +print(cnt)