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

test = []

point = []

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

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

    test.append([p, c])

    point.append([c + (p * i * 100), p])

inf = 10 ** 9

ans = inf

for i in range(2 ** d):

    b = bin(i)[2:]

    b = (d - len(b)) * "0" + b

    temp = 0

    calc = 0

    for j, bb in enumerate(b):

        if bb == "1":

            calc += point[j][0]

            temp += point[j][1]

    if calc >= g:

        ans = min(ans, temp)

    else:

        j_temp = b.rfind("0")

        if (g - calc) <= (test[j_temp][0] - 1) * (j_temp + 1) * 100:

            if (g - calc) % ((j_temp + 1) * 100) == 0:

                ans = min(ans, temp + ((g - calc) // ((j_temp + 1) * 100)))

            else:

                ans = min(ans, temp + ((g - calc) // ((j_temp + 1) * 100)) + 1)

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

point = []

for i in range(d):

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

    point.append([p, c])



def f(g, i):

    

    if i == -1:

        return 10000000

    n = min(g // ((i + 1) * 100), point[i][0])

    s = n * (i + 1) * 100

    if n == point[i][0]:

        s += point[i][1]

    if s < g:

        n += f(g - s, i - 1)

    return min(n, f(g, i - 1))

print((f(g, d-1)))
d, g = list(map(int, input().split()))
test = []
point = []
for i in range(1, d + 1):
    p, c = list(map(int, input().split()))
    test.append([p, c])
    point.append([c + (p * i * 100), p])
inf = 10**9
ans = inf
for i in range(2**d):
    b = bin(i)[2:]
    b = (d - len(b)) * "0" + b
    temp = 0
    calc = 0
    for j, bb in enumerate(b):
        if bb == "1":
            calc += point[j][0]
            temp += point[j][1]
    if calc >= g:
        ans = min(ans, temp)
    else:
        j_temp = b.rfind("0")
        if (g - calc) <= (test[j_temp][0] - 1) * (j_temp + 1) * 100:
            if (g - calc) % ((j_temp + 1) * 100) == 0:
                ans = min(ans, temp + ((g - calc) // ((j_temp + 1) * 100)))
            else:
                ans = min(ans, temp + ((g - calc) // ((j_temp + 1) * 100)) + 1)
print(ans)

d, g = list(map(int, input().split()))
point = []
for i in range(d):
    p, c = list(map(int, input().split()))
    point.append([p, c])


def f(g, i):
    if i == -1:
        return 10000000
    n = min(g // ((i + 1) * 100), point[i][0])
    s = n * (i + 1) * 100
    if n == point[i][0]:
        s += point[i][1]
    if s < g:
        n += f(g - s, i - 1)
    return min(n, f(g, i - 1))


print((f(g, d - 1)))

-test = [] -for i in range(1, d + 1): +for i in range(d): -    test.append([p, c]) -    point.append([c + (p * i * 100), p]) -inf = 10**9 -ans = inf -for i in range(2**d): -    b = bin(i)[2:] -    b = (d - len(b)) * "0" + b -    temp = 0 -    calc = 0 -    for j, bb in enumerate(b): -        if bb == "1": -            calc += point[j][0] -            temp += point[j][1] -    if calc >= g: -        ans = min(ans, temp) -    else: -        j_temp = b.rfind("0") -        if (g - calc) <= (test[j_temp][0] - 1) * (j_temp + 1) * 100: -            if (g - calc) % ((j_temp + 1) * 100) == 0: -                ans = min(ans, temp + ((g - calc) // ((j_temp + 1) * 100))) -            else: -                ans = min(ans, temp + ((g - calc) // ((j_temp + 1) * 100)) + 1) -print(ans) +    point.append([p, c]) + + +def f(g, i): +    if i == -1: +        return 10000000 +    n = min(g // ((i + 1) * 100), point[i][0]) +    s = n * (i + 1) * 100 +    if n == point[i][0]: +        s += point[i][1] +    if s < g: +        n += f(g - s, i - 1) +    return min(n, f(g, i - 1)) + + +print((f(g, d - 1)))