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

P, C = [], []



for _ in range(D):

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

    P.append(p); C.append(c)



ans = float('inf')



for bit in range(2**D):

    is_solve = [ 0 for _ in range(D) ]

    score, solve_num = 0, 0

    # i 番目の bit が立っている => 100(i+1)点をつけられた p_i 問を全完する

    for i in range(D):

        if (bit >> i) & 1:

            score += (100 * (i+1) * P[i] + C[i])

            solve_num += P[i]

            is_solve[i] += P[i]



    for i in range(D-1, -1, -1):

        if score >= G:

            break



        while is_solve[i] < P[i]:

            score += 100*(i+1)

            solve_num += 1

            is_solve[i] += 1

            if score >= G:

                break



    ans = min(ans, solve_num)



print(ans)



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

P, C = [], []



for _ in range(D):

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

    P.append(p); C.append(c)



ans = float('inf')



for bit in range(2**D):

    score, solve_num = 0, 0



    for i in range(D):

        if (bit >> i) & 1:

            score += (100 * (i+1) * P[i] + C[i])

            solve_num += P[i]



    for i in range(D-1, -1, -1):

        if score >= G:

            break



        if (bit >> i) & 1:

            continue



        for j in range(P[i]):

            score += 100*(i+1)

            solve_num += 1



            if score >= G:

                break



    ans = min(ans, solve_num)



print(ans)

D, G = list(map(int, input().split()))
P, C = [], []
for _ in range(D):
    p, c = list(map(int, input().split()))
    P.append(p)
    C.append(c)
ans = float("inf")
for bit in range(2**D):
    is_solve = [0 for _ in range(D)]
    score, solve_num = 0, 0
    # i 番目の bit が立っている => 100(i+1)点をつけられた p_i 問を全完する
    for i in range(D):
        if (bit >> i) & 1:
            score += 100 * (i + 1) * P[i] + C[i]
            solve_num += P[i]
            is_solve[i] += P[i]
    for i in range(D - 1, -1, -1):
        if score >= G:
            break
        while is_solve[i] < P[i]:
            score += 100 * (i + 1)
            solve_num += 1
            is_solve[i] += 1
            if score >= G:
                break
    ans = min(ans, solve_num)
print(ans)

D, G = list(map(int, input().split()))
P, C = [], []
for _ in range(D):
    p, c = list(map(int, input().split()))
    P.append(p)
    C.append(c)
ans = float("inf")
for bit in range(2**D):
    score, solve_num = 0, 0
    for i in range(D):
        if (bit >> i) & 1:
            score += 100 * (i + 1) * P[i] + C[i]
            solve_num += P[i]
    for i in range(D - 1, -1, -1):
        if score >= G:
            break
        if (bit >> i) & 1:
            continue
        for j in range(P[i]):
            score += 100 * (i + 1)
            solve_num += 1
            if score >= G:
                break
    ans = min(ans, solve_num)
print(ans)

-    is_solve = [0 for _ in range(D)] -    # i 番目の bit が立っている => 100(i+1)点をつけられた p_i 問を全完する -            is_solve[i] += P[i] -        while is_solve[i] < P[i]: +        if (bit >> i) & 1: +            continue +        for j in range(P[i]): -            is_solve[i] += 1