#include <bits/stdc++.h>
using namespace std;
template <class T, class T2>
inline int chkmax(T& x, const T2& y) {
  return x < y ? x = y, 1 : 0;
}
template <class T, class T2>
inline int chkmin(T& x, const T2& y) {
  return x > y ? x = y, 1 : 0;
}
const int MAXN = (1 << 20);
const int mod = 998244353;
template <class T>
T pw(T a, int pw) {
  T ret(1);
  while (pw) {
    if (pw & 1) ret *= a;
    a *= a;
    pw >>= 1;
  }
  return ret;
}
template <unsigned mod>
class Modint {
 private:
  unsigned x;

 public:
  Modint() { x = 0; }
  Modint(unsigned _x) { x = _x; }
  operator unsigned() { return x; }
  Modint operator==(const Modint& m) const { return x == m.x; }
  Modint operator!=(const Modint& m) const { return x != m.x; }
  Modint operator+=(const Modint& m) {
    x = (x + m.x >= mod ? x + m.x - mod : x + m.x);
    return *this;
  }
  Modint operator-=(const Modint& m) {
    x = (x < m.x ? x - m.x + mod : x - m.x);
    return *this;
  }
  Modint operator*=(const Modint& m) {
    x = 1ULL * x * m.x % mod;
    return *this;
  }
  Modint operator+=(const int32_t m) {
    x = (x + (m % mod) >= mod ? x + (m % mod) - mod : x + (m % mod));
    return *this;
  }
  Modint operator-=(const int32_t m) {
    x = (x < (m % mod) ? x - (m % mod) + mod : x - (m % mod));
    return *this;
  }
  Modint operator*=(const int32_t m) {
    x = 1ULL * x * (m % mod) % mod;
    return *this;
  }
  Modint operator+=(const int64_t m) {
    x = (x + (m % mod) >= mod ? x + (m % mod) - mod : x + (m % mod));
    return *this;
  }
  Modint operator-=(const int64_t m) {
    x = (x < (m % mod) ? x - (m % mod) + mod : x - (m % mod));
    return *this;
  }
  Modint operator*=(const int64_t m) {
    x = 1ULL * x * (m % mod) % mod;
    return *this;
  }
  Modint operator+(const Modint& m) const { return Modint(*this) += m; }
  Modint operator-(const Modint& m) const { return Modint(*this) -= m; }
  Modint operator*(const Modint& m) const { return Modint(*this) *= m; }
  Modint operator+(const int32_t m) const { return Modint(*this) += m; }
  Modint operator-(const int32_t m) const { return Modint(*this) -= m; }
  Modint operator*(const int32_t m) const { return Modint(*this) *= m; }
  Modint operator+(const int64_t m) const { return Modint(*this) += m; }
  Modint operator-(const int64_t m) const { return Modint(*this) -= m; }
  Modint operator*(const int64_t m) const { return Modint(*this) *= m; }
  Modint inv() { return pw(Modint(*this), mod - 2); }
};
int n, m;
Modint<mod> A;
int _a;
int a[MAXN];
void read() {
  cin >> n >> m;
  cin >> _a;
  A = _a;
  for (int i = 1; i <= m; i++) cin >> a[i];
}
void solve() {
  Modint<mod> ret = pw(A, n - a[m] * 2), i2 = 2;
  i2 = i2.inv();
  for (int i = m; i >= 1; i--) {
    int cnt = a[i] - a[i - 1];
    Modint<mod> let = pw(A, cnt);
    ret *= (let) * (let + 1) * i2;
  }
  cout << ret << '\n';
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  read();
  solve();
  return 0;
}
