module main; // https://yukicoder.me/problems/no/247/editorial より // 動的計画法 import std; // aとbを比較してbの方が小さいならばaの値をbに更新する void chMin(T)(ref T a, in T b) { if (a > b) a = b; } void main() { // 入力 int C = readln.chomp.to!int; int N = readln.chomp.to!int; auto A = readln.split.to!(int[]); // 答えの計算 immutable INF = 10 ^^ 9; auto dp = new int[](C + 1); dp[] = INF; dp[0] = 0; foreach (i; 1 .. C + 1) { foreach (a; A) { if (i - a >= 0 && dp[i - a] != INF) chMin(dp[i], dp[i - a] + 1); } } // 答えの出力 writeln(dp[C] == INF ? -1 : dp[C]); }