from collections import defaultdict



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

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



N=10**6

dp= [   [ float("inf") for i in range(N+1)] for idx in range(D+1)  ]

dp[0][0]=0



for idx, x  in enumerate(P):

	m=idx+1	#money

	p,c=x[0], x[1]/100

	for i in range(N,-1,-1):

		if dp[idx][i]!=float("inf"):

			for j in range(p,-1,-1):	# j= problems count   , idx = score of a problem

				if j==p:

					dp[idx+1][i+m*j+c]=min( dp[idx+1][i+m*j+c] , dp[idx][i]+j )

				else:

					dp[idx+1][i+m*j]=min( dp[idx+1][i+m*j] , dp[idx][i]+j )





ans=float("inf")



for i in range(G/100,N):

	ans=min(ans, dp[-1][i])



print(ans)

	





from collections import defaultdict



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

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



N=10**6

dp= [  float("inf") for i in range(N+1) ]

dp[0]=0



for idx, x  in enumerate(P):

	m=idx+1	#money

	p,c=x[0], x[1]/100

	for i in range(N,-1,-1):

		if dp[i]!=float("inf"):

			for j in range(p,-1,-1):	# j= problems count   , idx = score of a problem

				if j==p:

					dp[i+m*j+c]=min( dp[i+m*j+c] , dp[i]+j )

				else:

					dp[i+m*j]=min( dp[i+m*j] , dp[i]+j )







ans=float("inf")



for i in range(G/100,N):

	ans=min(ans, dp[i])



print(ans)

	





from collections import defaultdict

D, G = list(map(int, input().split()))
P = [list(map(int, input().split())) for i in range(D)]
N = 10**6
dp = [[float("inf") for i in range(N + 1)] for idx in range(D + 1)]
dp[0][0] = 0
for idx, x in enumerate(P):
    m = idx + 1  # money
    p, c = x[0], x[1] / 100
    for i in range(N, -1, -1):
        if dp[idx][i] != float("inf"):
            for j in range(p, -1, -1):  # j= problems count   , idx = score of a problem
                if j == p:
                    dp[idx + 1][i + m * j + c] = min(
                        dp[idx + 1][i + m * j + c], dp[idx][i] + j
                    )
                else:
                    dp[idx + 1][i + m * j] = min(dp[idx + 1][i + m * j], dp[idx][i] + j)
ans = float("inf")
for i in range(G / 100, N):
    ans = min(ans, dp[-1][i])
print(ans)

from collections import defaultdict

D, G = list(map(int, input().split()))
P = [list(map(int, input().split())) for i in range(D)]
N = 10**6
dp = [float("inf") for i in range(N + 1)]
dp[0] = 0
for idx, x in enumerate(P):
    m = idx + 1  # money
    p, c = x[0], x[1] / 100
    for i in range(N, -1, -1):
        if dp[i] != float("inf"):
            for j in range(p, -1, -1):  # j= problems count   , idx = score of a problem
                if j == p:
                    dp[i + m * j + c] = min(dp[i + m * j + c], dp[i] + j)
                else:
                    dp[i + m * j] = min(dp[i + m * j], dp[i] + j)
ans = float("inf")
for i in range(G / 100, N):
    ans = min(ans, dp[i])
print(ans)

-dp = [[float("inf") for i in range(N + 1)] for idx in range(D + 1)] -dp[0][0] = 0 +dp = [float("inf") for i in range(N + 1)] +dp[0] = 0 -        if dp[idx][i] != float("inf"): +        if dp[i] != float("inf"): -                    dp[idx + 1][i + m * j + c] = min( -                        dp[idx + 1][i + m * j + c], dp[idx][i] + j -                    ) +                    dp[i + m * j + c] = min(dp[i + m * j + c], dp[i] + j) -                    dp[idx + 1][i + m * j] = min(dp[idx + 1][i + m * j], dp[idx][i] + j) +                    dp[i + m * j] = min(dp[i + m * j], dp[i] + j) -    ans = min(ans, dp[-1][i]) +    ans = min(ans, dp[i])