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

pc = []

for n in range(D):

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

    pc.append([p, c, p * (n + 1)*100 + c])



ans = sum(pc[:][0])

for i in range(2 ** D):

    temp = 0

    numberProb = 0

    box = ["-"] * D

    for j in range(D):

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

            box[D - j - 1] = "+"

    for k, l in enumerate(box):

        if l == "+":

            temp += pc[k][2]

            numberProb += pc[k][0]



    if temp >= G:

        ans = min(ans, numberProb)

    else:

        lisind = max( [i for i, x in enumerate(box) if x == '-'])

        for m in range(pc[lisind][0]):

            temp += (lisind + 1) * 100

            numberProb += 1

            if temp >= G:

                ans = min(ans, numberProb)

                break



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

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

# 大問D問中のn問といてG点以上をとる最低の問題数n



ans = int(1e10)

for i in range(2 ** D):

    zen = []

    atemp = 0

    ktemp = 0

    for j in range(D):

        if (i >> j) & 1:

            zen.append(True)

        else:

            zen.append(False)

    for n, tf in enumerate(zen):

        if tf:

            atemp += pc[n][0] * (n+1) * 100 + pc[n][1]

            ktemp += pc[n][0]

        else:

            hanpa = n

    if atemp >= G:

        ans = min(ans, ktemp)

    else:

        if atemp + pc[hanpa][0]*(hanpa+1)*100 < G:

            continue

        else:

            if (G - atemp) % ((hanpa+1)*100) == 0:

                ans = min(ans, ktemp + ((G - atemp) // ((hanpa+1)*100)))

            else:

                ans = min(ans, ktemp + ((G - atemp) // ((hanpa+1)*100)) + 1)



print(ans)
D, G = list(map(int, input().split()))
pc = []
for n in range(D):
    p, c = list(map(int, input().split()))
    pc.append([p, c, p * (n + 1) * 100 + c])
ans = sum(pc[:][0])
for i in range(2**D):
    temp = 0
    numberProb = 0
    box = ["-"] * D
    for j in range(D):
        if (i >> j) & 1:
            box[D - j - 1] = "+"
    for k, l in enumerate(box):
        if l == "+":
            temp += pc[k][2]
            numberProb += pc[k][0]
    if temp >= G:
        ans = min(ans, numberProb)
    else:
        lisind = max([i for i, x in enumerate(box) if x == "-"])
        for m in range(pc[lisind][0]):
            temp += (lisind + 1) * 100
            numberProb += 1
            if temp >= G:
                ans = min(ans, numberProb)
                break
print(ans)

D, G = list(map(int, input().split()))
pc = [list(map(int, input().split())) for _ in range(D)]
# 大問D問中のn問といてG点以上をとる最低の問題数n
ans = int(1e10)
for i in range(2**D):
    zen = []
    atemp = 0
    ktemp = 0
    for j in range(D):
        if (i >> j) & 1:
            zen.append(True)
        else:
            zen.append(False)
    for n, tf in enumerate(zen):
        if tf:
            atemp += pc[n][0] * (n + 1) * 100 + pc[n][1]
            ktemp += pc[n][0]
        else:
            hanpa = n
    if atemp >= G:
        ans = min(ans, ktemp)
    else:
        if atemp + pc[hanpa][0] * (hanpa + 1) * 100 < G:
            continue
        else:
            if (G - atemp) % ((hanpa + 1) * 100) == 0:
                ans = min(ans, ktemp + ((G - atemp) // ((hanpa + 1) * 100)))
            else:
                ans = min(ans, ktemp + ((G - atemp) // ((hanpa + 1) * 100)) + 1)
print(ans)

-pc = [] -for n in range(D): -    p, c = list(map(int, input().split())) -    pc.append([p, c, p * (n + 1) * 100 + c]) -ans = sum(pc[:][0]) +pc = [list(map(int, input().split())) for _ in range(D)] +# 大問D問中のn問といてG点以上をとる最低の問題数n +ans = int(1e10) -    temp = 0 -    numberProb = 0 -    box = ["-"] * D +    zen = [] +    atemp = 0 +    ktemp = 0 -            box[D - j - 1] = "+" -    for k, l in enumerate(box): -        if l == "+": -            temp += pc[k][2] -            numberProb += pc[k][0] -    if temp >= G: -        ans = min(ans, numberProb) +            zen.append(True) +        else: +            zen.append(False) +    for n, tf in enumerate(zen): +        if tf: +            atemp += pc[n][0] * (n + 1) * 100 + pc[n][1] +            ktemp += pc[n][0] +        else: +            hanpa = n +    if atemp >= G: +        ans = min(ans, ktemp) -        lisind = max([i for i, x in enumerate(box) if x == "-"]) -        for m in range(pc[lisind][0]): -            temp += (lisind + 1) * 100 -            numberProb += 1 -            if temp >= G: -                ans = min(ans, numberProb) -                break +        if atemp + pc[hanpa][0] * (hanpa + 1) * 100 < G: +            continue +        else: +            if (G - atemp) % ((hanpa + 1) * 100) == 0: +                ans = min(ans, ktemp + ((G - atemp) // ((hanpa + 1) * 100))) +            else: +                ans = min(ans, ktemp + ((G - atemp) // ((hanpa + 1) * 100)) + 1)