Buggy python submission (verdict: Runtime Error):
import math
H,N=map(int,input().split())
A=[]
B=[]
for i in range(N):
    n,a=input().split()
    A.append(int(n))
    B.append(int(a))
C=[]
for i in range(N):
    C.append(A[i]/B[i])
sub=0
for i in range(N):
    if C[i]>=C[sub]:
        sub=i
sub2=math.ceil(H/A[sub])
sub3=sub2*B[sub]
def f(x):
    if x<=0:
        return 0
    else:
        mini=f(x-A[0])+B[0]
        for i in range (1,N):
            sub=f(x-A[i])+B[i]
            if sub<mini:
                mini=sub
        return mini
for ia in range(H,sub2*A[sub]):
    if f(ia)<sub3:
        sub3=f(ia)
print(sub3)

Fixed submission:
H,N=map(int,input().split())
A=[]
B=[]
for i in range(N):
    n,a=input().split()
    A.append(int(n))
    B.append(int(a))
def f(x):
    if x<=0:
        return 0
    else:
        mini=g(x-A[0])+B[0]
        for i in range (1,N):
            sub=g(x-A[i])+B[i]
            if sub<mini:
                mini=sub
        return mini
def g(x):
    if x<0:
        return 0
    else:
        return g_list[x]
g_list=[]
g_list.append(0)
for i in range(1,H+1):
    g_list.append(f(i))
print(g_list[-1])

Buggy python submission (verdict: Runtime Error):
import math
import numpy as np
H,N=map(int,input().split())
A=[]
B=[]
for i in range(N):
  n,a=input().split()
  A.append(int(n))
  B.append(int(a))
C=[]
for i in range(N):
  C.append(A[i]/B[i])
sub=0
for i in range(N):
  if C[i]>=C[sub]:
    sub=i
sub2=math.ceil(H/A[sub])
sub3=sub2*B[sub]
for ia in range(H,sub2*A[sub]):
  t = ia
  M = len(A) - 1
  elm = []
  for i, step in enumerate(A):
    temp = [1] * (M - i)
    elm.append(np.arange(0, t+1, step).reshape(-1, *temp))
  res = 0
  for x in elm:
    res = res + x
  for x in np.argwhere(res == t):
    sub4=0
    for ib in range(N):
      sub4+=B[ib]*x[ib]
    if sub4<=sub3:
      sub3=sub4
print(sub3)

Fixed submission:
H,N=map(int,input().split())
A=[]
B=[]
for i in range(N):
    n,a=input().split()
    A.append(int(n))
    B.append(int(a))
def f(x):
    if x<=0:
        return 0
    else:
        mini=g(x-A[0])+B[0]
        for i in range (1,N):
            sub=g(x-A[i])+B[i]
            if sub<mini:
                mini=sub
        return mini
def g(x):
    if x<0:
        return 0
    else:
        return g_list[x]
g_list=[]
g_list.append(0)
for i in range(1,H+1):
    g_list.append(f(i))
print(g_list[-1])

Buggy python submission (verdict: Runtime Error):
import math
import numpy as np
H,N=map(int,input().split)
A=[]
B=[]
for i in range(N):
    n,a=input().split()
    A.append(int(n))
    B.append(int(a))
C=[]
for i in range(N):
  C.append(A[i]/B[i])
sub=0
for i in range(N):
  if C[i]>=C[sub]:
    sub=i
sub2=math.ceil(H/A[sub])
sub3=sub2*B[sub]
for ia in range(H,sub2):
  t = ia
  M = len(A) - 1
  elm = []
  for i, step in enumerate(A):
    temp = [1] * (M - i)
    elm.append(np.arange(0, t+1, step).reshape(-1, *temp))
  res = 0
  for x in elm:
    res = res + x
  sub4=0
  for x in np.argwhere(res == t):
    for ib in range(N):
    sub4+=B[ib]*x[ib]
  if sub4<=sub3:
    sub3=sub4
print(sub3)

Fixed submission:
H,N=map(int,input().split())
A=[]
B=[]
for i in range(N):
    n,a=input().split()
    A.append(int(n))
    B.append(int(a))
def f(x):
    if x<=0:
        return 0
    else:
        mini=g(x-A[0])+B[0]
        for i in range (1,N):
            sub=g(x-A[i])+B[i]
            if sub<mini:
                mini=sub
        return mini
def g(x):
    if x<0:
        return 0
    else:
        return g_list[x]
g_list=[]
g_list.append(0)
for i in range(1,H+1):
    g_list.append(f(i))
print(g_list[-1])