#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1);
const long long mod = 998244353;
const long long prr = 3;
int N, M, K;
long long ipow(long long a, long long x) {
  long long ret = 1;
  a %= mod;
  while (x) {
    if (x & 1) ret = ret * a % mod;
    x >>= 1;
    a = a * a % mod;
  }
  return ret;
}
namespace fft {
void fft(vector<long long> &a, bool inv) {
  int n = a.size(), j = 0;
  vector<long long> roots(n / 2);
  for (int i = 1; i < n; i++) {
    int bit = (n >> 1);
    while (j >= bit) {
      j -= bit;
      bit >>= 1;
    }
    j += bit;
    if (i < j) swap(a[i], a[j]);
  }
  long long ang = ipow(prr, (mod - 1) / n);
  if (inv) ang = ipow(ang, mod - 2);
  for (int i = 0; i < n / 2; i++) {
    roots[i] = (i ? (roots[i - 1] * ang % mod) : 1);
  }
  for (int i = 2; i <= n; i <<= 1) {
    int step = n / i;
    for (int j = 0; j < n; j += i) {
      for (int k = 0; k < i / 2; k++) {
        long long u = a[j + k], v = a[j + k + i / 2] * roots[step * k] % mod;
        a[j + k] = (u + v) % mod;
        a[j + k + i / 2] = ((u - v) % mod + mod) % mod;
      }
    }
  }
  int divn = ipow(n, mod - 2);
  if (inv)
    for (int i = 0; i < n; i++) a[i] = a[i] * divn % mod;
}
vector<long long> gv(vector<long long> &v, int N) {
  vector<long long> fv(v.begin(), v.end());
  int n = 2;
  while (n < v.size()) n <<= 1;
  fv.resize(n);
  fft(fv, 0);
  for (int i = 0; i < n; i++) fv[i] = ipow(fv[i], N);
  fft(fv, 1);
  return fv;
}
};  // namespace fft
vector<long long> dp, step;
bool can_use[10];
int main() {
  scanf("%d %d", &N, &K);
  for (int i = 0, x; i < K; i++) {
    scanf("%d", &x);
    can_use[x] = 1;
  }
  for (int i = 0; i <= 9; i++) {
    step.push_back(can_use[i]);
  }
  step.resize(2000005);
  N /= 2;
  dp = fft::gv(step, N);
  long long ans = 0;
  for (int i = 0; i < dp.size(); i++) {
    ans += dp[i] * dp[i];
    ans %= mod;
  }
  printf("%lld", ans);
}
