#include <bits/stdc++.h>
using namespace std;
const int mod=998244353;
long long b[200007];
long long ksm(long long x,long long y){//快速幂
long long ans=1;
while(x){
if(x&1)
ans=ans*y%mod;
y=y*y%mod;
x>>=1;
}
return ans;
}
int main(){
long long n,m,a;
scanf("%lld%lld%lld",&n,&m,&a);
long long ans=1;
for(int i=1;i<=m;i++){
scanf("%lld",&b[i]);
long long c=ksm(b[i]-b[i-1],a);//多出来的部分进行排列组合
ans=c*(c+1)/2%mod*ans%mod;//左右各多余部分的a次方,即x^2a,减去左右倒置后相同,即与一边的组合情况数量相等,即x^a,除以二得到交换后相同的数量再加上之前被减去的左右镜像的x^a种得到答案
}
ans=ans*ksm(n-2*b[m],a)%mod;//快速幂乘上还未组合过的
printf("%lld
",ans);
return 0;
}