from itertools import combinations



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

PC = []

for i in range(D):

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

    total = ((i + 1) * 100) * p + c

    PC.append([p, c, total])



A = []

B = {i for i in range(D)}

for i in range(D+1):

    A += list(combinations(B, i))



# print(A)



ans = []

for ai in A:

    p = 0  # ポイント

    c = 0  # 問題数

    for aii in ai:

        p += PC[aii][2]

        c += PC[aii][0]

    if p < G:

        x = B.difference(ai)

        max_x = max(x)

        cnt = 0

        while p < G and cnt < PC[max_x][0] - 1:

            p += (max_x + 1) * 100

            cnt += 1

            c += 1

        if p >= G:

            # ans.append([p, c])

            ans.append(c)

    else:

        # ans.append([p, c])

        ans.append(c)



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

PC = []

for i in range(D):

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

    s = (i+1) * 100

    PC.append([p, c, s])



P = []

for i in range(2 ** D):

    b = format(i, 'b').zfill(D)

    P.append(b)



def get_high_score_q(p):

    if p.count('0') == 0:

        return None

    else:

        pos = []

        for i, pi in enumerate(p):

            if pi == '0':

                pos.append(i)

        return pos[-1]



ans = 10 ** 10

# P: ['00', '01', '10', '11']

for pi in P:

    # print('pi', pi)

    scores = 0

    probs = 0

    for i, b in enumerate(pi):

        if b == '0':

            pass

        elif b == '1':

            pc = PC[i]

            scores += pc[0] * pc[2] + pc[1]

            probs += pc[0]

        else:

            raise Exception()



    # print(scores, probs)

    if scores < G:

        q = get_high_score_q(pi)

        pc = PC[q]

        for i in range(pc[0]):

            scores += pc[2]

            probs += 1

            if scores >= G:

                break

    # print(scores, probs)

    if scores >= G:

        ans = min(ans, probs)



print(ans)
from itertools import combinations

D, G = list(map(int, input().split()))
PC = []
for i in range(D):
    p, c = list(map(int, input().split()))
    total = ((i + 1) * 100) * p + c
    PC.append([p, c, total])
A = []
B = {i for i in range(D)}
for i in range(D + 1):
    A += list(combinations(B, i))
# print(A)
ans = []
for ai in A:
    p = 0  # ポイント
    c = 0  # 問題数
    for aii in ai:
        p += PC[aii][2]
        c += PC[aii][0]
    if p < G:
        x = B.difference(ai)
        max_x = max(x)
        cnt = 0
        while p < G and cnt < PC[max_x][0] - 1:
            p += (max_x + 1) * 100
            cnt += 1
            c += 1
        if p >= G:
            # ans.append([p, c])
            ans.append(c)
    else:
        # ans.append([p, c])
        ans.append(c)
print((min(ans)))

D, G = list(map(int, input().split()))
PC = []
for i in range(D):
    p, c = list(map(int, input().split()))
    s = (i + 1) * 100
    PC.append([p, c, s])
P = []
for i in range(2**D):
    b = format(i, "b").zfill(D)
    P.append(b)


def get_high_score_q(p):
    if p.count("0") == 0:
        return None
    else:
        pos = []
        for i, pi in enumerate(p):
            if pi == "0":
                pos.append(i)
        return pos[-1]


ans = 10**10
# P: ['00', '01', '10', '11']
for pi in P:
    # print('pi', pi)
    scores = 0
    probs = 0
    for i, b in enumerate(pi):
        if b == "0":
            pass
        elif b == "1":
            pc = PC[i]
            scores += pc[0] * pc[2] + pc[1]
            probs += pc[0]
        else:
            raise Exception()
    # print(scores, probs)
    if scores < G:
        q = get_high_score_q(pi)
        pc = PC[q]
        for i in range(pc[0]):
            scores += pc[2]
            probs += 1
            if scores >= G:
                break
    # print(scores, probs)
    if scores >= G:
        ans = min(ans, probs)
print(ans)

-from itertools import combinations - -    total = ((i + 1) * 100) * p + c -    PC.append([p, c, total]) -A = [] -B = {i for i in range(D)} -for i in range(D + 1): -    A += list(combinations(B, i)) -# print(A) -ans = [] -for ai in A: -    p = 0  # ポイント -    c = 0  # 問題数 -    for aii in ai: -        p += PC[aii][2] -        c += PC[aii][0] -    if p < G: -        x = B.difference(ai) -        max_x = max(x) -        cnt = 0 -        while p < G and cnt < PC[max_x][0] - 1: -            p += (max_x + 1) * 100 -            cnt += 1 -            c += 1 -        if p >= G: -            # ans.append([p, c]) -            ans.append(c) +    s = (i + 1) * 100 +    PC.append([p, c, s]) +P = [] +for i in range(2**D): +    b = format(i, "b").zfill(D) +    P.append(b) + + +def get_high_score_q(p): +    if p.count("0") == 0: +        return None -        # ans.append([p, c]) -        ans.append(c) -print((min(ans))) +        pos = [] +        for i, pi in enumerate(p): +            if pi == "0": +                pos.append(i) +        return pos[-1] + + +ans = 10**10 +# P: ['00', '01', '10', '11'] +for pi in P: +    # print('pi', pi) +    scores = 0 +    probs = 0 +    for i, b in enumerate(pi): +        if b == "0": +            pass +        elif b == "1": +            pc = PC[i] +            scores += pc[0] * pc[2] + pc[1] +            probs += pc[0] +        else: +            raise Exception() +    # print(scores, probs) +    if scores < G: +        q = get_high_score_q(pi) +        pc = PC[q] +        for i in range(pc[0]): +            scores += pc[2] +            probs += 1 +            if scores >= G: +                break +    # print(scores, probs) +    if scores >= G: +        ans = min(ans, probs) +print(ans)