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

P,C = [0]*d,[0]*d

for i in range(d): P[i],C[i] = list(map(int,input().split()))

ans = 10**9

for bin in range(1<<d):

    cnt = tot = rest_max_bit = 0

    for i in range(d):

        if bin & 1<<i:

            t = (i + 1)*100

            tot += P[i]*t + C[i]

            cnt += P[i]

        else: rest_max_bit = i

    if tot < g:

        t = (rest_max_bit + 1)*100

        p = (g - tot + t - 1)//t

        if p >= P[rest_max_bit]: continue

        cnt += p

    ans = min(ans, cnt)

print(ans)

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

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



def dfs(d, rest): # difficulty, rest score

    if d <= 0: return 10**9

    num, bonus = data[d-1] # num of problems, bonus

    # now, use or don't use difficulty d?

    use = min(rest//(d*100), num) # num when use

    score = use * d * 100 # score when use

    if use == num: score += bonus # ?perfect

    if rest - score > 0: # ?rest

        use += dfs(d-1, rest - score) # rest of score -> recursion

    not_use = dfs(d-1, rest) # num when don't use -> recursion

    return min(use, not_use)



print((dfs(d, g)))

d, g = list(map(int, input().split()))
P, C = [0] * d, [0] * d
for i in range(d):
    P[i], C[i] = list(map(int, input().split()))
ans = 10**9
for bin in range(1 << d):
    cnt = tot = rest_max_bit = 0
    for i in range(d):
        if bin & 1 << i:
            t = (i + 1) * 100
            tot += P[i] * t + C[i]
            cnt += P[i]
        else:
            rest_max_bit = i
    if tot < g:
        t = (rest_max_bit + 1) * 100
        p = (g - tot + t - 1) // t
        if p >= P[rest_max_bit]:
            continue
        cnt += p
    ans = min(ans, cnt)
print(ans)

d, g = list(map(int, input().split()))
data = [list(map(int, input().split())) for _ in range(d)]


def dfs(d, rest):  # difficulty, rest score
    if d <= 0:
        return 10**9
    num, bonus = data[d - 1]  # num of problems, bonus
    # now, use or don't use difficulty d?
    use = min(rest // (d * 100), num)  # num when use
    score = use * d * 100  # score when use
    if use == num:
        score += bonus  # ?perfect
    if rest - score > 0:  # ?rest
        use += dfs(d - 1, rest - score)  # rest of score -> recursion
    not_use = dfs(d - 1, rest)  # num when don't use -> recursion
    return min(use, not_use)


print((dfs(d, g)))

-P, C = [0] * d, [0] * d -for i in range(d): -    P[i], C[i] = list(map(int, input().split())) -ans = 10**9 -for bin in range(1 << d): -    cnt = tot = rest_max_bit = 0 -    for i in range(d): -        if bin & 1 << i: -            t = (i + 1) * 100 -            tot += P[i] * t + C[i] -            cnt += P[i] -        else: -            rest_max_bit = i -    if tot < g: -        t = (rest_max_bit + 1) * 100 -        p = (g - tot + t - 1) // t -        if p >= P[rest_max_bit]: -            continue -        cnt += p -    ans = min(ans, cnt) -print(ans) +data = [list(map(int, input().split())) for _ in range(d)] + + +def dfs(d, rest):  # difficulty, rest score +    if d <= 0: +        return 10**9 +    num, bonus = data[d - 1]  # num of problems, bonus +    # now, use or don't use difficulty d? +    use = min(rest // (d * 100), num)  # num when use +    score = use * d * 100  # score when use +    if use == num: +        score += bonus  # ?perfect +    if rest - score > 0:  # ?rest +        use += dfs(d - 1, rest - score)  # rest of score -> recursion +    not_use = dfs(d - 1, rest)  # num when don't use -> recursion +    return min(use, not_use) + + +print((dfs(d, g)))