#include #include #include #include #include #include #include #include #include #include #include #include template inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; } template inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; } char ToUpper(char cX) { return toupper(cX); } char Tolower(char cX) { return tolower(cX); } const long long INF = 1LL << 60; const long long MOD = 1000000007; using namespace std; typedef unsigned long long ull; typedef long long ll; vector dp; int main() { ll k, n; cin >> k >> n; vectora(n); for (ll i = 0; i < n; i++) { cin >> a[i]; } dp = vector(k + 1, 0); dp[0] = 1; for (ll i = 0; i <= k; i++) { for (ll j = 0; j < a.size(); j++) { if (i - a[j] >= 0) { dp[i] += dp[i - a[j]]; dp[i] %= MOD; } } } cout << dp[k] << endl; return 0; }