#include <bits/stdc++.h>
clock_t t = clock();
namespace my_std {
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
template <typename T>
inline T rnd(T l, T r) {
  return uniform_int_distribution<T>(l, r)(rng);
}
template <typename T>
inline bool chkmax(T &x, T y) {
  return x < y ? x = y, 1 : 0;
}
template <typename T>
inline bool chkmin(T &x, T y) {
  return x > y ? x = y, 1 : 0;
}
template <typename T>
inline void read(T &t) {
  t = 0;
  char f = 0, ch = getchar();
  double d = 0.1;
  while (ch > '9' || ch < '0') f |= (ch == '-'), ch = getchar();
  while (ch <= '9' && ch >= '0') t = t * 10 + ch - 48, ch = getchar();
  if (ch == '.') {
    ch = getchar();
    while (ch <= '9' && ch >= '0') t += d * (ch ^ 48), d *= 0.1, ch = getchar();
  }
  t = (f ? -t : t);
}
template <typename T, typename... Args>
inline void read(T &t, Args &...args) {
  read(t);
  read(args...);
}
void file() {}
inline void chktime() {}
long long ksm(long long x, int y) {
  long long ret = 1;
  for (; y; y >>= 1, x = x * x % 998244353ll)
    if (y & 1) ret = ret * x % 998244353ll;
  return ret;
}
long long inv(long long x) { return ksm(x, 998244353ll - 2); }
}  // namespace my_std
using namespace my_std;
int limit, r[8010100];
void NTT_init(int n) {
  limit = 1;
  int l = -1;
  while (limit <= n + n) limit <<= 1, ++l;
  for (int i = (0); i <= (limit - 1); i++)
    r[i] = (r[i >> 1] >> 1) | ((i & 1) << l);
}
void NTT(long long *a, int type) {
  for (int i = (0); i <= (limit - 1); i++)
    if (i < r[i]) swap(a[i], a[r[i]]);
  for (int i = (0); i <= (limit - 1); i++) a[i] %= 998244353ll;
  for (int mid = 1; mid < limit; mid <<= 1) {
    long long Wn = ksm(3, (998244353ll - 1) / mid >> 1);
    if (type == -1) Wn = inv(Wn);
    for (int j = 0, len = mid << 1; j < limit; j += len) {
      long long w = 1;
      for (int k = 0; k < mid; k++, w = w * Wn % 998244353ll) {
        long long x = a[j + k], y = a[j + k + mid] * w;
        a[j + k] = (x + y) % 998244353ll;
        a[j + k + mid] =
            (1ll * 998244353ll * 998244353ll - y + x) % 998244353ll;
      }
    }
  }
  if (type == 1) return;
  long long I = inv(limit);
  for (int i = (0); i <= (limit - 1); i++) a[i] = a[i] * I % 998244353ll;
}
int n, K;
long long a[8010100];
int main() {
  file();
  read(n, K);
  int x;
  for (int i = (1); i <= (K); i++) read(x), a[x] = 1;
  NTT_init(n * 10);
  NTT(a, 1);
  for (int i = (0); i <= (limit); i++) a[i] = ksm(a[i], n / 2);
  NTT(a, -1);
  long long ans = 0;
  for (int i = (0); i <= (n * 10); i++)
    (ans += a[i] * a[i] % 998244353ll) %= 998244353ll;
  cout << ans;
  return 0;
}
