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

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



ans=1000

for i in range(1<<D):

    # print(bin(i))

    score=0

    problem=0

    highest=0

    for j in range(D):

        if ((i>>j)&1)==1:

            score+=l[j][1]+(j+1)*l[j][0]*100    # 素点

            # print('complete:',l[j][1]+(j+1)*l[j][0]*100)

            problem+=l[j][0]

            # print('s:',score,'P:',problem)

        else:

            highest=max(highest,j)

    if score<G and i!=(1<<D)-1:

        for k in range(l[highest][0]+1):

            score+=(highest+1)*100

            problem+=1

            # print('s:',score,'P:',problem)

            if score>=G:

                # print('ANS1')

                # print('s:',score,'P:',problem)

                ans=min(ans,problem)

    elif score>=G:

        ans=min(ans,problem)

        # print('G:',G)

        # print('ANS2')

        # print('s:',score,'P:',problem)



print(ans)
import math

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



P = []

for _ in range(D):

    p, c = list(map(int, input().split()))

    P.append((p, c))



ans = 10000

for i in range(2 ** D):

    score = 0

    solve = 0

    maxj = -1

    for j in range(D):  # このループが一番のポイント

        if ((i >> j) & 1):  # 順に右にシフトさせ最下位bitのチェックを行う

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

            solve += P[j][0]

        else:

            maxj = max(maxj, j)



    if maxj == -1:

        if score >= G:

            ans = min(ans, solve)

    elif score+(maxj+1)*(P[maxj][0]-1)*100 >= G:

        solve += max(0, math.ceil((G-score)/(maxj+1)/100))

        ans = min(ans, solve)

    # print(bin(i), ans, solve, score, maxj, score+(maxj+1)*(P[maxj][0]-1))



print(ans)

D, G = list(map(int, input().split()))
l = [list(map(int, input().split())) for i in range(D)]
ans = 1000
for i in range(1 << D):
    # print(bin(i))
    score = 0
    problem = 0
    highest = 0
    for j in range(D):
        if ((i >> j) & 1) == 1:
            score += l[j][1] + (j + 1) * l[j][0] * 100  # 素点
            # print('complete:',l[j][1]+(j+1)*l[j][0]*100)
            problem += l[j][0]
            # print('s:',score,'P:',problem)
        else:
            highest = max(highest, j)
    if score < G and i != (1 << D) - 1:
        for k in range(l[highest][0] + 1):
            score += (highest + 1) * 100
            problem += 1
            # print('s:',score,'P:',problem)
            if score >= G:
                # print('ANS1')
                # print('s:',score,'P:',problem)
                ans = min(ans, problem)
    elif score >= G:
        ans = min(ans, problem)
        # print('G:',G)
        # print('ANS2')
        # print('s:',score,'P:',problem)
print(ans)

import math

D, G = list(map(int, input().split()))
P = []
for _ in range(D):
    p, c = list(map(int, input().split()))
    P.append((p, c))
ans = 10000
for i in range(2**D):
    score = 0
    solve = 0
    maxj = -1
    for j in range(D):  # このループが一番のポイント
        if (i >> j) & 1:  # 順に右にシフトさせ最下位bitのチェックを行う
            score += (j + 1) * P[j][0] * 100 + P[j][1]
            solve += P[j][0]
        else:
            maxj = max(maxj, j)
    if maxj == -1:
        if score >= G:
            ans = min(ans, solve)
    elif score + (maxj + 1) * (P[maxj][0] - 1) * 100 >= G:
        solve += max(0, math.ceil((G - score) / (maxj + 1) / 100))
        ans = min(ans, solve)
    # print(bin(i), ans, solve, score, maxj, score+(maxj+1)*(P[maxj][0]-1))
print(ans)

+import math + -l = [list(map(int, input().split())) for i in range(D)] -ans = 1000 -for i in range(1 << D): -    # print(bin(i)) +P = [] +for _ in range(D): +    p, c = list(map(int, input().split())) +    P.append((p, c)) +ans = 10000 +for i in range(2**D): -    problem = 0 -    highest = 0 -    for j in range(D): -        if ((i >> j) & 1) == 1: -            score += l[j][1] + (j + 1) * l[j][0] * 100  # 素点 -            # print('complete:',l[j][1]+(j+1)*l[j][0]*100) -            problem += l[j][0] -            # print('s:',score,'P:',problem) +    solve = 0 +    maxj = -1 +    for j in range(D):  # このループが一番のポイント +        if (i >> j) & 1:  # 順に右にシフトさせ最下位bitのチェックを行う +            score += (j + 1) * P[j][0] * 100 + P[j][1] +            solve += P[j][0] -            highest = max(highest, j) -    if score < G and i != (1 << D) - 1: -        for k in range(l[highest][0] + 1): -            score += (highest + 1) * 100 -            problem += 1 -            # print('s:',score,'P:',problem) -            if score >= G: -                # print('ANS1') -                # print('s:',score,'P:',problem) -                ans = min(ans, problem) -    elif score >= G: -        ans = min(ans, problem) -        # print('G:',G) -        # print('ANS2') -        # print('s:',score,'P:',problem) +            maxj = max(maxj, j) +    if maxj == -1: +        if score >= G: +            ans = min(ans, solve) +    elif score + (maxj + 1) * (P[maxj][0] - 1) * 100 >= G: +        solve += max(0, math.ceil((G - score) / (maxj + 1) / 100)) +        ans = min(ans, solve) +    # print(bin(i), ans, solve, score, maxj, score+(maxj+1)*(P[maxj][0]-1))