from math import ceil



D, G = [int(t) for t in input().split()]

p = []

c = []

for i in range(D):

    p_, c_ = [int(t) for t in input().split()]

    p.append(p_)

    c.append(c_)



def solve(G, i):

    """100i点以下の問題だけでGを達成する最小問題数"""

    if i <= 0:

        return float('inf')

    #最も配転が高い問題で総合点を超えることができるか確認

    n = min(ceil(G / (100 * i)), p[i - 1])

    s = 100 * i * n

    #もし総合展を超えることができるときの問題数がボーナス点に達するならば足す

    if n == p[i - 1]:

        s += c[i - 1]

    if G > s:

        n += solve(G - s, i - 1)

    return min(n, solve(G, i - 1))



print((solve(G, D)))
from math import ceil

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

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



def dfs(G,i):

    if i <= 0:

        return float('inf')

    n = min(ceil(G/(100*i)),list[i-1][0])

    s = 100*i*n

    if n == list[i-1][0]:

        s += list[i-1][1]

    if G > s:

        n += dfs(G-s,i-1)

    return min(n,dfs(G,i-1))



print((dfs(G,D)))
from math import ceil

D, G = [int(t) for t in input().split()]
p = []
c = []
for i in range(D):
    p_, c_ = [int(t) for t in input().split()]
    p.append(p_)
    c.append(c_)


def solve(G, i):
    """100i点以下の問題だけでGを達成する最小問題数"""
    if i <= 0:
        return float("inf")
    # 最も配転が高い問題で総合点を超えることができるか確認
    n = min(ceil(G / (100 * i)), p[i - 1])
    s = 100 * i * n
    # もし総合展を超えることができるときの問題数がボーナス点に達するならば足す
    if n == p[i - 1]:
        s += c[i - 1]
    if G > s:
        n += solve(G - s, i - 1)
    return min(n, solve(G, i - 1))


print((solve(G, D)))

from math import ceil

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


def dfs(G, i):
    if i <= 0:
        return float("inf")
    n = min(ceil(G / (100 * i)), list[i - 1][0])
    s = 100 * i * n
    if n == list[i - 1][0]:
        s += list[i - 1][1]
    if G > s:
        n += dfs(G - s, i - 1)
    return min(n, dfs(G, i - 1))


print((dfs(G, D)))

-D, G = [int(t) for t in input().split()] -p = [] -c = [] -for i in range(D): -    p_, c_ = [int(t) for t in input().split()] -    p.append(p_) -    c.append(c_) +D, G = list(map(int, input().split())) +list = [list(map(int, input().split())) for _ in range(D)] -def solve(G, i): -    """100i点以下の問題だけでGを達成する最小問題数""" +def dfs(G, i): -    # 最も配転が高い問題で総合点を超えることができるか確認 -    n = min(ceil(G / (100 * i)), p[i - 1]) +    n = min(ceil(G / (100 * i)), list[i - 1][0]) -    # もし総合展を超えることができるときの問題数がボーナス点に達するならば足す -    if n == p[i - 1]: -        s += c[i - 1] +    if n == list[i - 1][0]: +        s += list[i - 1][1] -        n += solve(G - s, i - 1) -    return min(n, solve(G, i - 1)) +        n += dfs(G - s, i - 1) +    return min(n, dfs(G, i - 1)) -print((solve(G, D))) +print((dfs(G, D)))