d, g = list(map(int, input().split()))

pc_ls = []

for i in range(d):

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

    pc_ls.append([p, c])



ptns = []

for i in range(2 ** d):

    ptn = []

    for j in range(d):

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

            ptn.append(j)

    ptns.append(ptn)



ret = 10 ** 10



for item in ptns:

    cnt = 0

    pnt = 0

    for val in item:

        cnt += pc_ls[val][0]

        pnt += (100 * (val + 1)) * pc_ls[val][0] + pc_ls[val][1]

    left = g - pnt

    if left <= 0:

        ret = min(ret, cnt)

    else:

        for i in range(1, d + 1):

            if (d - i) in item:

                continue

            else:

                max_val = (100 * (d - i + 1)) * pc_ls[-i][0]

                if max_val < left:

                    cnt += pc_ls[-i][0]

                    left -= max_val

                else:

                    cnt += (left + 100 * (d - i + 1) -

                            1) // (100 * (d - i + 1))

                    break

        ret = min(ret, cnt)



print(ret)

import itertools

from typing import List, Tuple





def main():

    d, g = list(map(int, input().split()))

    v = []

    for _ in range(d):

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

        v.append((p, c))



    print((ag(v, g)))





def ag(v: List[Tuple[int, int]], g: int) -> int:

    ret = 10 ** 10

    for comb in itertools.product((False, True), repeat=len(v)):

        cnt, score = 0, 0

        for i, bit in enumerate(comb):

            if bit:

                score += (i + 1) * 100 * v[i][0] + v[i][1]

                cnt += v[i][0]

        if score < g:

            idx = len(v) - list(reversed(comb)).index(False) - 1

            add = ((g - score) + ((idx + 1) * 100) - 1) // ((idx + 1) * 100)

            if add < v[idx][0]:

                cnt += add

            else:

                cnt = 10 ** 10  # impossible

        ret = min(ret, cnt)

    return ret





if __name__ == '__main__':

    main()

d, g = list(map(int, input().split()))
pc_ls = []
for i in range(d):
    p, c = list(map(int, input().split()))
    pc_ls.append([p, c])
ptns = []
for i in range(2**d):
    ptn = []
    for j in range(d):
        if (i >> j) & 1:
            ptn.append(j)
    ptns.append(ptn)
ret = 10**10
for item in ptns:
    cnt = 0
    pnt = 0
    for val in item:
        cnt += pc_ls[val][0]
        pnt += (100 * (val + 1)) * pc_ls[val][0] + pc_ls[val][1]
    left = g - pnt
    if left <= 0:
        ret = min(ret, cnt)
    else:
        for i in range(1, d + 1):
            if (d - i) in item:
                continue
            else:
                max_val = (100 * (d - i + 1)) * pc_ls[-i][0]
                if max_val < left:
                    cnt += pc_ls[-i][0]
                    left -= max_val
                else:
                    cnt += (left + 100 * (d - i + 1) - 1) // (100 * (d - i + 1))
                    break
        ret = min(ret, cnt)
print(ret)

import itertools
from typing import List, Tuple


def main():
    d, g = list(map(int, input().split()))
    v = []
    for _ in range(d):
        p, c = list(map(int, input().split()))
        v.append((p, c))
    print((ag(v, g)))


def ag(v: List[Tuple[int, int]], g: int) -> int:
    ret = 10**10
    for comb in itertools.product((False, True), repeat=len(v)):
        cnt, score = 0, 0
        for i, bit in enumerate(comb):
            if bit:
                score += (i + 1) * 100 * v[i][0] + v[i][1]
                cnt += v[i][0]
        if score < g:
            idx = len(v) - list(reversed(comb)).index(False) - 1
            add = ((g - score) + ((idx + 1) * 100) - 1) // ((idx + 1) * 100)
            if add < v[idx][0]:
                cnt += add
            else:
                cnt = 10**10  # impossible
        ret = min(ret, cnt)
    return ret


if __name__ == "__main__":
    main()

-d, g = list(map(int, input().split())) -pc_ls = [] -for i in range(d): -    p, c = list(map(int, input().split())) -    pc_ls.append([p, c]) -ptns = [] -for i in range(2**d): -    ptn = [] -    for j in range(d): -        if (i >> j) & 1: -            ptn.append(j) -    ptns.append(ptn) -ret = 10**10 -for item in ptns: -    cnt = 0 -    pnt = 0 -    for val in item: -        cnt += pc_ls[val][0] -        pnt += (100 * (val + 1)) * pc_ls[val][0] + pc_ls[val][1] -    left = g - pnt -    if left <= 0: +import itertools +from typing import List, Tuple + + +def main(): +    d, g = list(map(int, input().split())) +    v = [] +    for _ in range(d): +        p, c = list(map(int, input().split())) +        v.append((p, c)) +    print((ag(v, g))) + + +def ag(v: List[Tuple[int, int]], g: int) -> int: +    ret = 10**10 +    for comb in itertools.product((False, True), repeat=len(v)): +        cnt, score = 0, 0 +        for i, bit in enumerate(comb): +            if bit: +                score += (i + 1) * 100 * v[i][0] + v[i][1] +                cnt += v[i][0] +        if score < g: +            idx = len(v) - list(reversed(comb)).index(False) - 1 +            add = ((g - score) + ((idx + 1) * 100) - 1) // ((idx + 1) * 100) +            if add < v[idx][0]: +                cnt += add +            else: +                cnt = 10**10  # impossible -    else: -        for i in range(1, d + 1): -            if (d - i) in item: -                continue -            else: -                max_val = (100 * (d - i + 1)) * pc_ls[-i][0] -                if max_val < left: -                    cnt += pc_ls[-i][0] -                    left -= max_val -                else: -                    cnt += (left + 100 * (d - i + 1) - 1) // (100 * (d - i + 1)) -                    break -        ret = min(ret, cnt) -print(ret) +    return ret + + +if __name__ == "__main__": +    main()