#include #define FOR(i, a, b) for(ll i = (a); i < (b); i++) #define REP(i, a) FOR(i, 0, a) using namespace std; using ll = long long; const ll MOD = 998244353; struct mll{ ll x; mll(ll _x = 0){ x = (_x % MOD + MOD) % MOD; } }; ostream& operator<<(ostream &os, mll n){ os << n.x; return os; } mll operator +(mll a, mll b){ return mll(a.x + b.x); } mll operator -(mll a, mll b) { return mll(a.x - b.x); } void operator +=(mll &a, mll b) { a = a + b; } mll operator *(mll a, mll b){ return mll(a.x * b.x); } void operator *=(mll &a, mll b){ a = a * b; } mll mpw(mll n, ll m){ if(m < 0){ n = mpw(n, MOD - 2); m *= -1; } mll ret(1), p = n; while(m){ if(m & 1){ ret *= p; } p *= p; m >>= 1; } return ret; } mll minv(mll n){ return mpw(n, -1); } mll operator /(mll a, mll b){ return a * minv(b); } int main(){ ll X = 178; ll N, M, K; scanf("%lld %lld %lld", &N, &M, &K); vector cnt_A(X + 1, 0), cnt(N + 1, 0); REP(i, M) { ll a; scanf("%lld", &a); if (a <= X) { ++cnt_A[a]; } else { for (ll j = a; j <= N; j += a) { ++cnt[j]; } } } mll ans(0), minv_M = minv(M); FOR(i, 1, N + 1) { ll m = cnt[i]; for (ll j = 1; j <= X && j * j <= i; ++j) { if (i % j == 0) { m += cnt_A[j]; ll j2 = i / j; if (j2 <= X && j2 != j){ m += cnt_A[j2]; } } } ans += mll(1) - mpw(mll(1) - mll(m) * minv_M, K); } printf("%lld\n", ans.x); }