#include <bits/stdc++.h>
using namespace std;
const int mod = 998244353, Deg = 1048576;
int t, k, d, ans = 0;
int w[50], wi[50];
vector<int> Dp(Deg);
int Mul(int a, int b) { return (long long)a * b % mod; }
int Binpow(int a, int b) {
  if (a == 0) {
    return 0;
  }
  if (b == 0) {
    return 1;
  }
  int t = Binpow(a, b >> 1);
  if (b & 1) {
    return Mul(Mul(t, t) % mod, a) % mod;
  } else {
    return Mul(t, t) % mod;
  }
}
void NTT(vector<int> &a, bool inverse) {
  int n = a.size();
  if (n == 1) {
    return;
  }
  vector<int> a0(n / 2), a1(n / 2);
  for (int i = 0; 2 * i < n; i++) {
    a0[i] = a[i << 1];
    a1[i] = a[i << 1 | 1];
  }
  NTT(a0, inverse);
  NTT(a1, inverse);
  int wt = (inverse ? wi[int(log2(n))] : w[int(log2(n))]) % mod, z = 1;
  for (int i = 0; 2 * i < n; i++) {
    int k = Mul(a1[i], z);
    k = (k % mod + mod) % mod;
    a[i] = (a0[i] + k) % mod;
    a[i + n / 2] = (a0[i] - k + mod) % mod;
    if (inverse) {
      a[i] = Mul(a[i], 499122177);
      a[i + n / 2] = Mul(a[i + n / 2], 499122177);
    }
    z = Mul(z, wt) % mod;
  }
}
signed main() {
  w[20] = 275981743;
  wi[20] = 147148651;
  for (int i = 19; i >= 0; i--) {
    w[i] = Mul(w[i + 1], w[i + 1]) % mod;
    wi[i] = Mul(wi[i + 1], wi[i + 1]) % mod;
  }
  for (int i = 0; i < Dp.size(); i++) {
    Dp[i] = 0;
  }
  cin >> t >> k;
  t >>= 1;
  for (int i = 1; i <= k; i++) {
    cin >> d;
    Dp[d] = 1;
  }
  NTT(Dp, false);
  for (int i = 0; i < Deg; i++) {
    Dp[i] = Binpow(Dp[i], t) % mod;
  }
  NTT(Dp, true);
  for (int i = 0; i < Deg; i++) {
    Dp[i] %= mod;
    ans = (ans + Mul(Dp[i], Dp[i]) % mod) % mod;
  }
  cout << ans;
}
