#!/usr/bin/env python3

# -*- coding: utf-8 -*-

 

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 minsolve(G, p, c, 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 s >= G:

        return min(n, minsolve(G, p, c, i-1))

    else:

        return min(n + minsolve(G - s, p, c, i-1), minsolve(G, p, c, i-1))

 

m = min(minsolve(G, p, c, i) for i in range(1, D+1))

print(m)
#!/usr/bin/env python3

# -*- coding: utf-8 -*-



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_)



cache = {}



def minsolve(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]

    m = n if s >= G else n + minsolve(G - s, i-1)

    return min(m, minsolve(G, i-1))



print((minsolve(G, D)))
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
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 minsolve(G, p, c, 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 s >= G:
        return min(n, minsolve(G, p, c, i - 1))
    else:
        return min(n + minsolve(G - s, p, c, i - 1), minsolve(G, p, c, i - 1))


m = min(minsolve(G, p, c, i) for i in range(1, D + 1))
print(m)

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
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_)
cache = {}


def minsolve(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]
    m = n if s >= G else n + minsolve(G - s, i - 1)
    return min(m, minsolve(G, i - 1))


print((minsolve(G, D)))

+cache = {} -def minsolve(G, p, c, i): +def minsolve(G, i): -    if s >= G: -        return min(n, minsolve(G, p, c, i - 1)) -    else: -        return min(n + minsolve(G - s, p, c, i - 1), minsolve(G, p, c, i - 1)) +    m = n if s >= G else n + minsolve(G - s, i - 1) +    return min(m, minsolve(G, i - 1)) -m = min(minsolve(G, p, c, i) for i in range(1, D + 1)) -print(m) +print((minsolve(G, D)))