#pragma GCC optimize ("O3")
#pragma GCC target ("avx")
char buf[20000];sz;
inline int rd()
{
	int ret=buf[sz++]-'0';
	if(buf[sz]>='0')
	{
		ret=ret*10+buf[sz++]-'0';
		if(buf[sz]>='0')
		{
			ret=ret*10+buf[sz++]-'0';
			if(buf[sz]>='0')
			{
				ret=ret*10+buf[sz++]-'0';
				if(buf[sz]>='0')
				{
					ret=ret*10+buf[sz++]-'0';
				}
			}
		}
	}
	sz++;
	return ret;
}
int d[3001],d2[3001];
const int mod=998244353;
main()
{
	read(0,buf,20000);
	int N=rd();
	int S=rd();
	int ans=0;
	for(int i=1;i<=N;i++)
	{
		d[S]=i;
		int A=rd();
		if(S>=A)memcpy(d2+A,d+A,(S-A)*4);
		for(int j=0;j<=S-A;j++)
		{
			d[j]+=d2[j+A];
			d[j]-=mod*(d[j]>=mod);
		}
		ans+=d[0];
		ans-=mod*(ans>=mod);
	}
	printf("%d",ans);
}