# include <iostream>
using namespace std;
//# define int long long
typedef long long ll;
# define MAX 1000001
# define qwer 998244353//这个注意,我一开始复制了两次,,
ll a[MAX];
ll ksm(ll a,ll b){//快速幂,重点
ll temp = a;
ll ans=1;
while (b){
if(b%2){
ans*=temp;
ans%=qwer;
}
b/=2;
temp=temp*temp;
temp=temp%qwer;
}
return ans%qwer;
}
int main()
{
ll n,p;
cin>>n>>p;
int i;
for(i=0; i<n; i++){
cin>>a[i];
}
ll sum=1;
for(i=0; i<n; i++){
sum=sum*(ksm(p,a[i])+1);//这道题的主要思想,就是一直滚动揉成一团(总和),然后又遇到新的物品,分两条路,选和不选,选就乘上去,不选就保持原状即+1
sum%=qwer;
}
cout<<sum;
return 0;
}