#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define For(i,a,b,c) for(ll i=a;i<b;i+=c)
#define For2(i,a,b,c) for(ll i=a;i>=b;i-=c)
#define vec_ll vector<vector<ll>>
#define vec_pr vector<pair<ll,ll>>
#define p_ll pair<ll,ll>
#define pbk push_back
#define mkpr make_pair
#define fst first
#define snd second

void print(ll *arr, ll n){
    For(i,0,n,1)cout<<arr[i]<<" ";
    cout<<endl;
}

void print_vec(vector<ll> &vec, ll n){
    For(i,0,n,1)cout<<vec[i]<<" ";
    cout<<endl;
}


bool s_sec(const pair<ll,ll> &a, const pair<ll,ll> &b) {
    return (a.second < b.second);
}

ll fast_expo(ll a, ll p){
    //cout<<a<<" ";
    ll x=p-2;
    ll curr=a;
    ll ans=1;
    while(x!=0){
        if(x%2==1){
            ans=(ans*curr)%p;
        }
        x/=2;
        curr=(curr*curr)%p;
    }
    return ans;
}

//

//


int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

	//Step 1. Find prime factors
	vector<ll> prime;
	ll prime_len=3;
	prime.pbk(2);
	prime.pbk(3);
	prime.pbk(5);
	
	For(i,6,501,1){
		bool poss=true;
		ll itr=0;
		ll root = sqrt(i);
		while(itr<prime_len && prime[itr]<=root){
			if(i%prime[itr] == 0){
				poss=false;
				break;
			}
			itr++;
		}
		
		if(poss==true){
			prime.pbk(i);
			prime_len++;
		}
	}
	
	//Step2. Calculate the DP array
	ll Dp[200001];
	Dp[1]=1;Dp[2]=3;Dp[3]=5;
	
	For(i,4,200001,1){
		ll root=sqrt(i), prod=1, temp=i;
		ll itr=0;
		
		while(itr<prime_len && prime[itr]<=root){
				if(temp%prime[itr]==0){
					ll expo=0;
					
					while(temp%prime[itr]==0){
						expo++;
						temp/=prime[itr];
					}
					
					prod*=(expo+1);
				}
				itr++;
		}
		
		if(temp!=1)prod*=2;
		
		Dp[i]=Dp[i-1]+prod;
		
		//if(i<=10)cout<<"i: "<<i<<" prod: "<<prod<<"\n";
	}	
	
	ll K;
	cin>>K;
	
	ll ans=0;
	For(i,1,K+1,1){
		//cout<<Dp[K/i]<<"\n";
		ans+=Dp[K/i];
	}
	
	cout<<ans;
}





#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define rep(i,N) for(int i=0;i<(int)N;i++)
static inline void PUT(char c)
{
  static char buf[1<<15],*ptr=buf;
  if(ptr==buf+strlen(buf)||c==0){fwrite(buf,1,ptr-buf,stdout),ptr=buf;}*ptr++=c;
}
static inline int IN(void)
{
  int x=0,f=0,c=getchar();while(c<48||c>57){f^=c==45,c=getchar();}
  while(c>47&&c<58){x=x*10+c-48,c=getchar();}return f?-x:x;
}
static inline void OUT(int a)
{
  if(a<0)PUT('-'),a=-a;
  int d[40],i=0;do{d[i++]=a%10;}while(a/=10);
  while(i--){PUT(d[i]+48);}PUT('\n');
}
const int MOD=998244353,inv2=(MOD+1)/2;
static inline int MPow(int a,int b){return b?1l*MPow(1l*a*a%MOD,b>>1)*(b&1?a:1)%MOD:1;}
int fact[301],inv[301];
static inline void init(int MAX)
{
  fact[0]=1;rep(i,MAX)fact[i+1]=1l*fact[i]*(i+1)%MOD;
  inv[MAX]=MPow(fact[MAX],MOD-2);
  rep(i,MAX)inv[MAX-1-i]=1l*inv[MAX-i]*(MAX-i)%MOD;
}
static inline int comb(const int n,const int k)
{
  if(k<0||n<k){return 0;}return 1l*fact[n]*inv[n-k]%MOD*inv[k]%MOD;
}
int main(void)
{
  int N=IN(),K=IN(),A[N],sum[K+1]={0},temp[N],total=0;sum[0]=N;
  init(K);rep(i,N){A[i]=IN();temp[i]=1;}
  rep(i,K){rep(j,N){temp[j]=(1l*temp[j]*A[j])%MOD;if(temp[j]<0){temp[j]+=MOD;}sum[i+1]=(1l*sum[i+1]+temp[j])%MOD;}}
  rep(i,K)
  {
    total=0;
    rep(j,i+2){total=(1l*total+1l*comb(i+1,j)*(1l*sum[j]*sum[i+1-j]%MOD-sum[i+1]+MOD)%MOD*inv2)%MOD;}
    OUT(total);
  }
}