#include <bits/stdc++.h>
using namespace std;
long long mul(long long a, long long b, const long long &M) {
  long long q = (long double)a * (long double)b / (long double)M;
  long long r = a * b - q * M;
  return (r + 5 * M) % M;
}
long long div(long long a, long long b, const long long &M) {
  long long u = 1, x = 0, s = b, t = M;
  while (s) {
    long long q = t / s;
    swap(x -= u * q, u);
    swap(t -= s * q, s);
  }
  if (a % t) return -1;
  return mul(x < 0 ? x + M : x, a / t, M);
}
long long pow(long long a, long long b, const long long &M) {
  long long x = 1;
  for (; b > 0; b >>= 1) {
    if (b & 1) x = (a * x) % M;
    a = (a * a) % M;
  }
  return x;
}
template <int mod, int sign>
void fmt(vector<long long> &x) {
  const int n = x.size();
  int h = pow(3, (mod - 1) / n, mod);
  if (sign < 0) h = div(1, h, mod);
  for (int i = 0, j = 1; j < n - 1; ++j) {
    for (int k = n >> 1; k > (i ^= k); k >>= 1)
      ;
    if (j < i) swap(x[i], x[j]);
  }
  for (int m = 1; m < n; m *= 2) {
    long long w = 1, wk = pow(h, n / (2 * m), mod);
    for (int i = 0; i < m; ++i) {
      for (int s = i; s < n; s += 2 * m) {
        long long u = x[s], d = x[s + m] * w % mod;
        if ((x[s] = u + d) >= mod) x[s] -= mod;
        if ((x[s + m] = u - d) < 0) x[s + m] += mod;
      }
      w = w * wk % mod;
    }
  }
  if (sign < 0) {
    long long inv = div(1, n, mod);
    for (auto &a : x) a = a * inv % mod;
  }
}
template <int mod>
vector<long long> conv(vector<long long> a, vector<long long> b) {
  fmt<mod, +1>(a);
  fmt<mod, +1>(b);
  for (int i = 0; i < a.size(); ++i) a[i] = a[i] * b[i] % mod;
  fmt<mod, -1>(a);
  return a;
}
const long long mod = 998244353;
vector<long long> conv(vector<long long> a, vector<long long> b) {
  int n = a.size() + b.size() - 1;
  for (int k : {1, 2, 4, 8, 16}) n |= (n >> k);
  ++n;
  a.resize(n);
  b.resize(n);
  const int A = 167772161, B = 469762049, C = 1224736769,
            D = (long long)(A)*B % mod;
  vector<long long> x = conv<A>(a, b), y = conv<B>(a, b), z = conv<C>(a, b);
  for (int i = 0; i < x.size(); ++i) {
    long long X = (y[i] - x[i]) * 104391568;
    if ((X %= B) < 0) X += B;
    long long Y = (z[i] - (x[i] + A * X) % C) * 721017874;
    if ((Y %= C) < 0) Y += C;
    x[i] += A * X + D * Y;
    if ((x[i] %= mod) < 0) x[i] += mod;
  }
  x.resize(n);
  return x;
}
vector<long long> mul(vector<long long> p, vector<long long> q) {
  vector<long long> pq = conv(p, q);
  pq.resize(p.size() + q.size() - 1);
  while (!pq.empty() && !pq.back()) pq.pop_back();
  return pq;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.setf(ios::fixed);
  cout.precision(0);
  int n, k;
  cin >> n >> k;
  vector<long long> P(5 * n + 1);
  while (k--) {
    int i;
    cin >> i;
    P[i] = 1;
  }
  while (((int)P.size() & -(int)P.size()) != P.size()) P.push_back(0);
  fmt<mod, 1>(P);
  for (auto &i : P) i = pow(i, n >> 1, mod);
  fmt<mod, -1>(P);
  long long ans = 0;
  for (int s = 0; s < P.size(); s++) {
    ans += (P[s] * P[s]) % mod;
    ans %= mod;
  }
  cout << ans;
  return 0;
}
