# coding:utf-8



INF = float('inf')





def inpl(): return list(map(int, input().split()))





D, G = inpl()

P, C = [], []

for i in range(D):

    p, c = inpl()

    P.append(p)

    C.append(c + 100 * (i + 1) * p)



ans = INF

for i in range(2 ** D):

    point = 0

    cnt = 0

    rest_max = 0

    for shift in range(D):

        if i >> shift & 1:

            cnt += P[shift]

            point += C[shift]

        else:

            rest_max = shift



    if point < G:

        for j in range(P[rest_max]):

            if point >= G:

                break

            cnt += 1

            point += (rest_max + 1) * 100

        else:

            continue



    ans = min(ans, cnt)



print(ans)

# coding:utf-8



import sys



INF = float('inf')

MOD = 10 ** 9 + 7



def LI(): return [int(x) for x in sys.stdin.readline().split()]

def LI_(): return [int(x)-1 for x in sys.stdin.readline().split()]

def LS(): return sys.stdin.readline().split()

def II(): return int(sys.stdin.readline())

def SI(): return eval(input())





# mathを使わない切り上げ

def ceil(n, m):

    return -(-n//m)





d, g = LI()

contest = [LI() for _ in range(d)]



ans = INF



# Bit全探索

for bit in range(1 << d):

    score = 0

    cnt = 0

    remain_max = -1



    # 各bitが立っているか確認

    for i in range(d):

        if bit >> i & 1:

            score += contest[i][0] * (i + 1) * 100 + contest[i][1]

            cnt += contest[i][0]

            continue

        # コンプリートしなかった問題の中で最も得点の高い問題をメモ

        remain_max = i



    if score >= g:

        ans = min(ans, cnt)

        continue



    need = ceil((g - score) // 100, remain_max + 1)



    if need >= contest[remain_max][0]:

        continue



    ans = min(ans, cnt + need)



print(ans)

# coding:utf-8
INF = float("inf")


def inpl():
    return list(map(int, input().split()))


D, G = inpl()
P, C = [], []
for i in range(D):
    p, c = inpl()
    P.append(p)
    C.append(c + 100 * (i + 1) * p)
ans = INF
for i in range(2**D):
    point = 0
    cnt = 0
    rest_max = 0
    for shift in range(D):
        if i >> shift & 1:
            cnt += P[shift]
            point += C[shift]
        else:
            rest_max = shift
    if point < G:
        for j in range(P[rest_max]):
            if point >= G:
                break
            cnt += 1
            point += (rest_max + 1) * 100
        else:
            continue
    ans = min(ans, cnt)
print(ans)

# coding:utf-8
import sys

INF = float("inf")
MOD = 10**9 + 7


def LI():
    return [int(x) for x in sys.stdin.readline().split()]


def LI_():
    return [int(x) - 1 for x in sys.stdin.readline().split()]


def LS():
    return sys.stdin.readline().split()


def II():
    return int(sys.stdin.readline())


def SI():
    return eval(input())


# mathを使わない切り上げ
def ceil(n, m):
    return -(-n // m)


d, g = LI()
contest = [LI() for _ in range(d)]
ans = INF
# Bit全探索
for bit in range(1 << d):
    score = 0
    cnt = 0
    remain_max = -1
    # 各bitが立っているか確認
    for i in range(d):
        if bit >> i & 1:
            score += contest[i][0] * (i + 1) * 100 + contest[i][1]
            cnt += contest[i][0]
            continue
        # コンプリートしなかった問題の中で最も得点の高い問題をメモ
        remain_max = i
    if score >= g:
        ans = min(ans, cnt)
        continue
    need = ceil((g - score) // 100, remain_max + 1)
    if need >= contest[remain_max][0]:
        continue
    ans = min(ans, cnt + need)
print(ans)

+import sys + +MOD = 10**9 + 7 -def inpl(): -    return list(map(int, input().split())) +def LI(): +    return [int(x) for x in sys.stdin.readline().split()] -D, G = inpl() -P, C = [], [] -for i in range(D): -    p, c = inpl() -    P.append(p) -    C.append(c + 100 * (i + 1) * p) +def LI_(): +    return [int(x) - 1 for x in sys.stdin.readline().split()] + + +def LS(): +    return sys.stdin.readline().split() + + +def II(): +    return int(sys.stdin.readline()) + + +def SI(): +    return eval(input()) + + +# mathを使わない切り上げ +def ceil(n, m): +    return -(-n // m) + + +d, g = LI() +contest = [LI() for _ in range(d)] -for i in range(2**D): -    point = 0 +# Bit全探索 +for bit in range(1 << d): +    score = 0 -    rest_max = 0 -    for shift in range(D): -        if i >> shift & 1: -            cnt += P[shift] -            point += C[shift] -        else: -            rest_max = shift -    if point < G: -        for j in range(P[rest_max]): -            if point >= G: -                break -            cnt += 1 -            point += (rest_max + 1) * 100 -        else: +    remain_max = -1 +    # 各bitが立っているか確認 +    for i in range(d): +        if bit >> i & 1: +            score += contest[i][0] * (i + 1) * 100 + contest[i][1] +            cnt += contest[i][0] -    ans = min(ans, cnt) +        # コンプリートしなかった問題の中で最も得点の高い問題をメモ +        remain_max = i +    if score >= g: +        ans = min(ans, cnt) +        continue +    need = ceil((g - score) // 100, remain_max + 1) +    if need >= contest[remain_max][0]: +        continue +    ans = min(ans, cnt + need)