#!/usr/bin/env python3 # Based on http://pakapa104.hatenablog.com/entry/2016/07/02/014219 import array INF = 10 ** 9 def sieve_of_eratosthenes(end): is_prime = array.array("B", (True for i in range(end))) is_prime[0] = False is_prime[1] = False for i in range(2, end): if is_prime[i]: for j in range(2 * i, end, i): is_prime[j] = False return is_prime def compute_max_cups(init_money, cups): # 個数制限のないナップザック問題をボトムアップの動的計画法で解く # dp[i] = (所持金がiになるまでに買えるカップ麺の数) dp = array.array("l", (-INF for _ in range(init_money + 1))) dp[init_money] = 0 for cup in cups: for i in range(init_money - cup + 1)[::-1]: dp[i] = max(dp[i], dp[i + cup] + 1) # 素数表を得る is_prime = sieve_of_eratosthenes(init_money + 1) # 金欠チャンスの処理 # その後は、買えるだけ買う return sum(dp[i] for i in range(1, init_money + 1) if dp[i] > 0 and is_prime[i]) + max(dp) def main(): m = int(input()) _ = int(input()) cs = array.array("L", map(int, input().split())) print(compute_max_cups(m, cs)) if __name__ == '__main__': main()