Buggy python submission (verdict: Time Limit Exceeded):
from collections import deque
import itertools, math
d,g = list(map(int,input().split()))
pc = [list(map(int,input().split())) for _ in range(d)]
g /= 100

pat = list(itertools.permutations(range(d)))
ans = sum([pc[x][0] for x in range(d)])

def dfs(k, point, cnt, pat):
  global ans
  i = pat[k]
  
  cnt += min(pc[i][0], math.ceil((g-point)/(i+1)))
  point += min(pc[i][0], math.ceil((g-point)/(i+1))) * (i+1)
  point += pc[i][1]//100
  #print(k,i,point,cnt)
  if point >= g:  
    ans  = min(ans, cnt)
    return
  else:
    if k < d-1:
      dfs(k+1, point, cnt, pat)
      

for p in pat:
  dfs(0, 0, 0, list(p))

print(ans)

Fixed submission:
from collections import deque
import itertools, math
d,g = list(map(int,input().split()))
pc = [list(map(int,input().split())) for _ in range(d)]
g /= 100

#ans = sum([pc[x][0] for x in range(d)])
ans = float('inf')
for bit in range(1<<d):
  cnt = 0
  point = 0
  pat = set(range(1,d+1))
  
  for i in range(d):
    if bit & (1<<i):
      point += pc[i][0]*(i+1) + pc[i][1]//100
      cnt += pc[i][0]
      pat.discard(i+1)
  
  if point < g:
      next = max(pat)
      n = min(pc[next-1][0], math.ceil((g - point)/(next)))
      cnt += n
      point += n*(next)
    
  if point >= g:
      #print(ans,cnt)
      ans = min(ans,cnt)


print(ans)

Buggy python submission (verdict: Runtime Error):
from collections import deque
import itertools
d,g = list(map(int,input().split()))
pc = [list(map(int,input().split())) for _ in range(d)]
g /= 100

pat = list(itertools.permutations(range(d)))
ans = sum([[x,y] for x,y in zip(pc[0], pc[1])][0])

def dfs(k, point, cnt, pat):
  global ans
  i = pat[k]
  
  for j in range(pc[i][0]):
      point += (i+1)
      cnt += 1
      if j == pc[i][0]-1:
        point += pc[i][1]//100
      
      if point >= g:
        ans = min(ans, cnt)
        point = 0
        cnt = 0
        break
    
  if k < d-1:
    dfs(k+1, point, cnt, pat)

for p in pat:
  dfs(0, 0, 0, list(p))

print(ans)

Fixed submission:
from collections import deque
import itertools, math
d,g = list(map(int,input().split()))
pc = [list(map(int,input().split())) for _ in range(d)]
g /= 100

#ans = sum([pc[x][0] for x in range(d)])
ans = float('inf')
for bit in range(1<<d):
  cnt = 0
  point = 0
  pat = set(range(1,d+1))
  
  for i in range(d):
    if bit & (1<<i):
      point += pc[i][0]*(i+1) + pc[i][1]//100
      cnt += pc[i][0]
      pat.discard(i+1)
  
  if point < g:
      next = max(pat)
      n = min(pc[next-1][0], math.ceil((g - point)/(next)))
      cnt += n
      point += n*(next)
    
  if point >= g:
      #print(ans,cnt)
      ans = min(ans,cnt)


print(ans)

Buggy python submission (verdict: Runtime Error):
from collections import deque
import itertools
d,g = list(map(int,input().split()))
pc = [list(map(int,input().split())) for _ in range(d)]
g /= 100

pat = list(itertools.permutations(range(1,d+1)))
ans = sum([[x,y] for x,y in zip(pc[0], pc[1])][0])

def dfs(k, point, cnt, pat):
  global ans
  i = pat[k]
  for j in range(pc[i-1][0]):
    point += i
    cnt += 1
    if j == pc[i-1][0]-1:
      point += pc[i-1][1]/100
    #print(i,j,point,cnt)
    if point >= g:
      ans = min(ans, cnt)
      point = 0
      cnt = 0
      break
  
  if k < d-1:
    dfs(k+1, point, cnt, pat)
    
for p in pat:
  #print(p)
  dfs(0,0,0,list(p))

print(ans)

Fixed submission:
from collections import deque
import itertools, math
d,g = list(map(int,input().split()))
pc = [list(map(int,input().split())) for _ in range(d)]
g /= 100

#ans = sum([pc[x][0] for x in range(d)])
ans = float('inf')
for bit in range(1<<d):
  cnt = 0
  point = 0
  pat = set(range(1,d+1))
  
  for i in range(d):
    if bit & (1<<i):
      point += pc[i][0]*(i+1) + pc[i][1]//100
      cnt += pc[i][0]
      pat.discard(i+1)
  
  if point < g:
      next = max(pat)
      n = min(pc[next-1][0], math.ceil((g - point)/(next)))
      cnt += n
      point += n*(next)
    
  if point >= g:
      #print(ans,cnt)
      ans = min(ans,cnt)


print(ans)