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

p = []

c = []

for _ in range(D):

    p_i, c_i = list(map(int, input().split()))

    p.append(p_i)

    c.append(c_i)

ans = sum(p)

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

    status = bin(i)[2:].zfill(D)

    all_index = [j for j, k in enumerate(status) if k == str(1)]

    not_all_index = [j for j, k in enumerate(status) if k == str(0)]

    score = 0

    nums = 0

    for j in all_index:

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

        nums += p[j]

    if score < G:

        flag = 0

        for n in not_all_index[::-1]:

            if flag == 1:

                break

            for m in range(1, p[n]):

                score += 100 * (n + 1)

                nums += 1

                if score >= G:

                    flag = 1

                    break

    if score >= G:

        ans = min(nums, ans)

print(ans)
#!/usr/bin/env python3

import math



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

data = []

for i in range(D):

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

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

data = sorted(data)[::-1]



ans = float("inf")



for i in range(2 ** D):

    total = 0

    num = 0

    idx = []

    for k in range(D):

        if i >> k & 1 == 1:

            idx.append(k)

    

    for j in idx:

        d = data[j]

        total += d[0] * d[1] + d[2]

        num += d[1]

    

    if total >= G:

        ans = min(ans, num)

    else:

        for j in set(range(D)) - set(idx):

            d = data[j]

            if total + d[0] * (d[1] - 1) >= G:

                num += math.ceil((G - total) / d[0])

                ans = min(ans, num)

                continue

            else:

                total += + d[0] * (d[1] - 1)

                num += d[1] - 1

print(ans)
D, G = list(map(int, input().split()))
p = []
c = []
for _ in range(D):
    p_i, c_i = list(map(int, input().split()))
    p.append(p_i)
    c.append(c_i)
ans = sum(p)
for i in range(pow(2, D) - 1):
    status = bin(i)[2:].zfill(D)
    all_index = [j for j, k in enumerate(status) if k == str(1)]
    not_all_index = [j for j, k in enumerate(status) if k == str(0)]
    score = 0
    nums = 0
    for j in all_index:
        score += 100 * (j + 1) * p[j] + c[j]
        nums += p[j]
    if score < G:
        flag = 0
        for n in not_all_index[::-1]:
            if flag == 1:
                break
            for m in range(1, p[n]):
                score += 100 * (n + 1)
                nums += 1
                if score >= G:
                    flag = 1
                    break
    if score >= G:
        ans = min(nums, ans)
print(ans)

#!/usr/bin/env python3
import math

D, G = list(map(int, input().split()))
data = []
for i in range(D):
    p, c = list(map(int, input().split()))
    data.append([100 * (i + 1), p, c])
data = sorted(data)[::-1]
ans = float("inf")
for i in range(2**D):
    total = 0
    num = 0
    idx = []
    for k in range(D):
        if i >> k & 1 == 1:
            idx.append(k)
    for j in idx:
        d = data[j]
        total += d[0] * d[1] + d[2]
        num += d[1]
    if total >= G:
        ans = min(ans, num)
    else:
        for j in set(range(D)) - set(idx):
            d = data[j]
            if total + d[0] * (d[1] - 1) >= G:
                num += math.ceil((G - total) / d[0])
                ans = min(ans, num)
                continue
            else:
                total += +d[0] * (d[1] - 1)
                num += d[1] - 1
print(ans)

+#!/usr/bin/env python3 +import math + -p = [] -c = [] -for _ in range(D): -    p_i, c_i = list(map(int, input().split())) -    p.append(p_i) -    c.append(c_i) -ans = sum(p) -for i in range(pow(2, D) - 1): -    status = bin(i)[2:].zfill(D) -    all_index = [j for j, k in enumerate(status) if k == str(1)] -    not_all_index = [j for j, k in enumerate(status) if k == str(0)] -    score = 0 -    nums = 0 -    for j in all_index: -        score += 100 * (j + 1) * p[j] + c[j] -        nums += p[j] -    if score < G: -        flag = 0 -        for n in not_all_index[::-1]: -            if flag == 1: -                break -            for m in range(1, p[n]): -                score += 100 * (n + 1) -                nums += 1 -                if score >= G: -                    flag = 1 -                    break -    if score >= G: -        ans = min(nums, ans) +data = [] +for i in range(D): +    p, c = list(map(int, input().split())) +    data.append([100 * (i + 1), p, c]) +data = sorted(data)[::-1] +ans = float("inf") +for i in range(2**D): +    total = 0 +    num = 0 +    idx = [] +    for k in range(D): +        if i >> k & 1 == 1: +            idx.append(k) +    for j in idx: +        d = data[j] +        total += d[0] * d[1] + d[2] +        num += d[1] +    if total >= G: +        ans = min(ans, num) +    else: +        for j in set(range(D)) - set(idx): +            d = data[j] +            if total + d[0] * (d[1] - 1) >= G: +                num += math.ceil((G - total) / d[0]) +                ans = min(ans, num) +                continue +            else: +                total += +d[0] * (d[1] - 1) +                num += d[1] - 1