import sys

input = sys.stdin.readline



def ceil(a, b):

    if a%b == 0:

        return a//b

    else:

        return a//b + 1



def main():

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

    G //= 100

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



    ans = int(1e9)

    for i in range(2**D):

        tmp = 0

        rest = []

        count = 0

        for j in range(D):

            if i&1:# コンプリートする問題

                tmp += (j+1) * pc[j][0] + pc[j][1]//100

                count += pc[j][0]

            else:

                rest.append((j+1, pc[j][0]))

            i >>= 1

        rest = sorted(rest, reverse=True)

        rest_point = G - tmp

        if rest_point <= 0:# すでに足りている

            ans = min(ans, count)

        elif len(rest) > 0:# 不足分を補う必要がある

            plus = ceil(rest_point, rest[0][0])

            if plus < rest[0][1]:# p-1問以内ですむ

                ans = min(ans, count + plus)

        else:# すべて使っても足りない

            pass

    print(ans)



if __name__ == "__main__":

    main()

import sys

input = sys.stdin.readline



def ceil(a, b):

    if a%b == 0:

        return a//b

    else:

        return (a//b) + 1



def main():

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

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



    ans = int(1e9)

    for i in range(2**D):

        score = 0

        count = 0

        check = [False] * D

        for j in range(D):

            p, c = pc[j]

            if i&1:# 問題jを全て解く

                score += 100 * (j+1) * p + c

                count += p

                check[j] = True

            i >>= 1

        if score < G:

            for j in range(D):

                if not check[D-1-j]:

                    check[D-1-j] = True

                    p, c = pc[D-1-j]

                    tmp = ceil(G - score, (D-j) * 100)

                    if tmp < p:

                        count += tmp

                        score += tmp * (D-j) * 100

                    break

        if score >= G:

            # print(score, check, count)

            ans = min(ans, count)

    

    print(ans)









if __name__ == "__main__":

    main()
import sys

input = sys.stdin.readline


def ceil(a, b):
    if a % b == 0:
        return a // b
    else:
        return a // b + 1


def main():
    D, G = list(map(int, input().split()))
    G //= 100
    pc = [list(map(int, input().split())) for i in range(D)]
    ans = int(1e9)
    for i in range(2**D):
        tmp = 0
        rest = []
        count = 0
        for j in range(D):
            if i & 1:  # コンプリートする問題
                tmp += (j + 1) * pc[j][0] + pc[j][1] // 100
                count += pc[j][0]
            else:
                rest.append((j + 1, pc[j][0]))
            i >>= 1
        rest = sorted(rest, reverse=True)
        rest_point = G - tmp
        if rest_point <= 0:  # すでに足りている
            ans = min(ans, count)
        elif len(rest) > 0:  # 不足分を補う必要がある
            plus = ceil(rest_point, rest[0][0])
            if plus < rest[0][1]:  # p-1問以内ですむ
                ans = min(ans, count + plus)
        else:  # すべて使っても足りない
            pass
    print(ans)


if __name__ == "__main__":
    main()

import sys

input = sys.stdin.readline


def ceil(a, b):
    if a % b == 0:
        return a // b
    else:
        return (a // b) + 1


def main():
    D, G = list(map(int, input().split()))
    pc = [list(map(int, input().split())) for i in range(D)]
    ans = int(1e9)
    for i in range(2**D):
        score = 0
        count = 0
        check = [False] * D
        for j in range(D):
            p, c = pc[j]
            if i & 1:  # 問題jを全て解く
                score += 100 * (j + 1) * p + c
                count += p
                check[j] = True
            i >>= 1
        if score < G:
            for j in range(D):
                if not check[D - 1 - j]:
                    check[D - 1 - j] = True
                    p, c = pc[D - 1 - j]
                    tmp = ceil(G - score, (D - j) * 100)
                    if tmp < p:
                        count += tmp
                        score += tmp * (D - j) * 100
                    break
        if score >= G:
            # print(score, check, count)
            ans = min(ans, count)
    print(ans)


if __name__ == "__main__":
    main()

-        return a // b + 1 +        return (a // b) + 1 -    G //= 100 -        tmp = 0 -        rest = [] +        score = 0 +        check = [False] * D -            if i & 1:  # コンプリートする問題 -                tmp += (j + 1) * pc[j][0] + pc[j][1] // 100 -                count += pc[j][0] -            else: -                rest.append((j + 1, pc[j][0])) +            p, c = pc[j] +            if i & 1:  # 問題jを全て解く +                score += 100 * (j + 1) * p + c +                count += p +                check[j] = True -        rest = sorted(rest, reverse=True) -        rest_point = G - tmp -        if rest_point <= 0:  # すでに足りている +        if score < G: +            for j in range(D): +                if not check[D - 1 - j]: +                    check[D - 1 - j] = True +                    p, c = pc[D - 1 - j] +                    tmp = ceil(G - score, (D - j) * 100) +                    if tmp < p: +                        count += tmp +                        score += tmp * (D - j) * 100 +                    break +        if score >= G: +            # print(score, check, count) -        elif len(rest) > 0:  # 不足分を補う必要がある -            plus = ceil(rest_point, rest[0][0]) -            if plus < rest[0][1]:  # p-1問以内ですむ -                ans = min(ans, count + plus) -        else:  # すべて使っても足りない -            pass