import itertools



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

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



num = D #生成するビット数

bit_list = list(itertools.product([0, 1], repeat=num))

tmp = 10 ** 6



for bit in bit_list:

    count = 0

    num = 0

    for i in range(D):

        if bit[i] == 1:

            count += L[i][0] *(i+1) * 100 + L[i][1]

            num += L[i][0]

            

    if count >= G:

        tmp = min(num, tmp)

        

    else:

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

            if bit[D-i] == 0:

                for j in range(L[D-i][0]):

                    count += (D-i+1) * 100

                    num += 1

                    if count >= G:

                        break

                break

                

        if count >= G:

            tmp = min(num, tmp)

            

print(tmp)
import itertools



def solve(D, G, problems):

    bit_list = list(itertools.product([0, 1], repeat=D))

    

    result_count = 10 ** 8

    for pattern in bit_list:

        score = 0 # スコアの合計

        count = 0  # 解いた問題数

        for i in range(D):

            if pattern[i] == 1: # ビット値が１の難易度の問題は全て解く

                score += problems[i][0] * (i+1) * 100 + problems[i][1]  # 問題のスコア + ボーナス点

                count += problems[i][0]

            

            else:

                max_score_problem = i

    

        # 合計スコアが足りない場合，もっともスコアの高い未着手の問題を必要な分だけ解く

        if score < G:

            for i in range(problems[max_score_problem][0]):

                count += 1

                score += (max_score_problem + 1) * 100

                if score >= G:

                    break

        

        if score >= G:

            result_count = min(result_count, count)

            

    print(result_count)

    



if __name__ == '__main__':

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

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

    solve(D, G, problems)
import itertools

D, G = list(map(int, input().split()))
L = [list(map(int, input().split())) for _ in range(D)]
num = D  # 生成するビット数
bit_list = list(itertools.product([0, 1], repeat=num))
tmp = 10**6
for bit in bit_list:
    count = 0
    num = 0
    for i in range(D):
        if bit[i] == 1:
            count += L[i][0] * (i + 1) * 100 + L[i][1]
            num += L[i][0]
    if count >= G:
        tmp = min(num, tmp)
    else:
        for i in range(1, D + 1):
            if bit[D - i] == 0:
                for j in range(L[D - i][0]):
                    count += (D - i + 1) * 100
                    num += 1
                    if count >= G:
                        break
                break
        if count >= G:
            tmp = min(num, tmp)
print(tmp)

import itertools


def solve(D, G, problems):
    bit_list = list(itertools.product([0, 1], repeat=D))
    result_count = 10**8
    for pattern in bit_list:
        score = 0  # スコアの合計
        count = 0  # 解いた問題数
        for i in range(D):
            if pattern[i] == 1:  # ビット値が１の難易度の問題は全て解く
                score += (
                    problems[i][0] * (i + 1) * 100 + problems[i][1]
                )  # 問題のスコア + ボーナス点
                count += problems[i][0]
            else:
                max_score_problem = i
        # 合計スコアが足りない場合，もっともスコアの高い未着手の問題を必要な分だけ解く
        if score < G:
            for i in range(problems[max_score_problem][0]):
                count += 1
                score += (max_score_problem + 1) * 100
                if score >= G:
                    break
        if score >= G:
            result_count = min(result_count, count)
    print(result_count)


if __name__ == "__main__":
    D, G = list(map(int, input().split()))
    problems = [list(map(int, input().split())) for _ in range(D)]
    solve(D, G, problems)

-D, G = list(map(int, input().split())) -L = [list(map(int, input().split())) for _ in range(D)] -num = D  # 生成するビット数 -bit_list = list(itertools.product([0, 1], repeat=num)) -tmp = 10**6 -for bit in bit_list: -    count = 0 -    num = 0 -    for i in range(D): -        if bit[i] == 1: -            count += L[i][0] * (i + 1) * 100 + L[i][1] -            num += L[i][0] -    if count >= G: -        tmp = min(num, tmp) -    else: -        for i in range(1, D + 1): -            if bit[D - i] == 0: -                for j in range(L[D - i][0]): -                    count += (D - i + 1) * 100 -                    num += 1 -                    if count >= G: -                        break -                break -        if count >= G: -            tmp = min(num, tmp) -print(tmp) + +def solve(D, G, problems): +    bit_list = list(itertools.product([0, 1], repeat=D)) +    result_count = 10**8 +    for pattern in bit_list: +        score = 0  # スコアの合計 +        count = 0  # 解いた問題数 +        for i in range(D): +            if pattern[i] == 1:  # ビット値が１の難易度の問題は全て解く +                score += ( +                    problems[i][0] * (i + 1) * 100 + problems[i][1] +                )  # 問題のスコア + ボーナス点 +                count += problems[i][0] +            else: +                max_score_problem = i +        # 合計スコアが足りない場合，もっともスコアの高い未着手の問題を必要な分だけ解く +        if score < G: +            for i in range(problems[max_score_problem][0]): +                count += 1 +                score += (max_score_problem + 1) * 100 +                if score >= G: +                    break +        if score >= G: +            result_count = min(result_count, count) +    print(result_count) + + +if __name__ == "__main__": +    D, G = list(map(int, input().split())) +    problems = [list(map(int, input().split())) for _ in range(D)] +    solve(D, G, problems)