# dp[i][j](各マスの値) = i-1番目の品物の中からj円を支払うときの最小枚数
#  → 個数制限なし   
# <DP初期状態>
#   i\j  0   1   2    3   ...  n (お金(yen))
#   0    0  INF INF  INF  ... INF
#   1    0  INF INF  INF  ... INF
#                 ...
#   m-1  0  INF INF  INF  ... INF
#   m    0  INF INF  INF  ... INF
#  (i番目のコイン)
#
# <DP遷移式>
# if(j >= c_i):  c[i]のコイン採用可
#    dp[i+1] = min(dp[i][j-c[i]]+1     : c[i]を採用する(コイン枚数:1枚増える)
#                , dp[i][j])           : c[i]を採用しない
#                , dp[i+1][j-c[i]]+1)  : c[i]を重複を許して採用
# elif(j < c_j): money[i]のコイン採用不可
#    dp[i+1][j] = dp[i][j]              : c[i]を採用しない
 
n,m = map(int,input().split())
c = list(map(int,input().split()))
 
# DP配列の初期化    
dp = []
for i in range(m+100):
    tmp = [0]
    for j in range(n+99): tmp.append(float('inf'))
    dp.append(tmp)
    
# DP遷移    
for i in range(m):
  #print_dp(dp,i)  
  for j in range(n+1):
    if(j>=c[i]): # i番目のコイン採用可
      dp[i+1][j] = min(dp[i][j-c[i]]+1, 
                       dp[i][j],
                       dp[i+1][j-c[i]]+1)  
    else: # i番目のコイン採用不可
      dp[i+1][j] = dp[i][j]

#print_dp(dp,i+1)    
# 出力
print(dp[m][n]) n,m = map(int,input().split()) n map(int,input().split()) map int input().split() ().split () input split m c = list(map(int,input().split())) c list(map(int,input().split())) list map(int,input().split()) map int input().split() ().split () input split dp = [] dp [] for i in range(m+100):
    tmp = [0]
    for j in range(n+99): tmp.append(float('inf'))
    dp.append(tmp)
    
# DP遷移     i range(m+100) range m+100 m 100 tmp = [0] tmp [0] 0 for j in range(n+99): tmp.append(float('inf'))
     j range(n+99) range n+99 n 99 dp.append(tmp) dp.append dp append tmp for i in range(m):
  #print_dp(dp,i)  
  for j in range(n+1):
    if(j>=c[i]): # i番目のコイン採用可
      dp[i+1][j] = min(dp[i][j-c[i]]+1, 
                       dp[i][j],
                       dp[i+1][j-c[i]]+1)  
    else: # i番目のコイン採用不可
      dp[i+1][j] = dp[i][j]

#print_dp(dp,i+1)    
# 出力 i range(m) range m for j in range(n+1):
    if(j>=c[i]): # i番目のコイン採用可
      dp[i+1][j] = min(dp[i][j-c[i]]+1, 
                       dp[i][j],
                       dp[i+1][j-c[i]]+1)  
    else: # i番目のコイン採用不可
      dp[i+1][j] = dp[i][j]

#print_dp(dp,i+1)    
# 出力 j range(n+1) range n+1 n 1 if(j>=c[i]): # i番目のコイン採用可
      dp[i+1][j] = min(dp[i][j-c[i]]+1, 
                       dp[i][j],
                       dp[i+1][j-c[i]]+1)  
    else: # i番目のコイン採用不可
      dp[i+1][j] = dp[i][j]

#print_dp(dp,i+1)    
# 出力 j>=c[i] j c[i] c i dp[i+1][j] = min(dp[i][j-c[i]]+1, 
                       dp[i][j],
                       dp[i+1][j-c[i]]+1) dp[i+1][j] [i+1] dp i+1 i 1 j min(dp[i][j-c[i]]+1, 
                       dp[i][j],
                       dp[i+1][j-c[i]]+1) min dp[i][j-c[i]]+1 dp[i][j-c[i]] [i] dp i j-c[i] j c[i] c i 1 dp[i][j] [i] dp i j dp[i+1][j-c[i]]+1 dp[i+1][j-c[i]] [i+1] dp i+1 i 1 j-c[i] j c[i] c i 1 dp[i+1][j] = dp[i][j] dp[i+1][j] [i+1] dp i+1 i 1 j dp[i][j] [i] dp i j print(dp[m][n]) print dp[m][n] [m] dp m n dp = [] [] dp n,m = map(int,input().split()) map(int,input().split()) n c = list(map(int,input().split())) list(map(int,input().split())) c tmp = [0] [0] tmp m = map(int,input().split()) map(int,input().split()) m
# dp[i][j](各マスの値) = i-1番目の品物の中からj円を支払うときの最小枚数
#  → 個数制限なし   
# <DP初期状態>
#   i\j  0   1   2    3   ...  n (お金(yen))
#   0    0  INF INF  INF  ... INF
#   1    0  INF INF  INF  ... INF
#                 ...
#   m-1  0  INF INF  INF  ... INF
#   m    0  INF INF  INF  ... INF
#  (i番目のコイン)
#
# <DP遷移式>
# if(j >= c_i):  c[i]のコイン採用可
#    dp[i+1] = min(dp[i][j-c[i]]+1     : c[i]を採用する(コイン枚数:1枚増える)
#                , dp[i][j])           : c[i]を採用しない
#                , dp[i+1][j-c[i]]+1)  : c[i]を重複を許して採用
# elif(j < c_j): money[i]のコイン採用不可
#    dp[i+1][j] = dp[i][j]              : c[i]を採用しない
 
n,m = map(int,input().split())
c = list(map(int,input().split()))
 
# DP配列の初期化    
dp = []
for i in range(m+100):
    tmp = [0]
    for j in range(n+99): tmp.append(float('inf'))
    dp.append(tmp)
    
# DP遷移    
for i in range(m):
  #print_dp(dp,i)  
  for j in range(n+1):
    if(j>=c[i]): # i番目のコイン採用可
      dp[i+1][j] = min(dp[i][j-c[i]]+1, 
                       dp[i][j],
                       dp[i+1][j-c[i]]+1)  
    else: # i番目のコイン採用不可
      dp[i+1][j] = dp[i][j]

#print_dp(dp,i+1)    
# 出力
print(dp[m][n])
