#include<bits/stdc++.h>
using namespace std;
const int N=55,mod=998244353;
typedef long long ll;
#define fi first
#define se second
int n,m,x,a[N],l;
ll ans;
inline void add(int &x,int y){
	x+=y;if(x>=mod) x-=mod;
}
struct Mat{
	int a[N][N];
	Mat(){memset(a,0,sizeof(a));}
	Mat operator * (const Mat & b){
		Mat c;
		for(int k=0;k<=m;k++)
			for(int i=0;i<=m;i++)
				for(int j=0;j<=m;j++)
					add(c.a[i][j],1ll*a[i][k]*b.a[k][j]%mod);
		return c;
	}
};
vector<pair<ll,ll>> seg;
vector<ll> d;
Mat qpow(Mat a,int b){
	Mat res;
	for(int i=0;i<=m;i++) res.a[i][i]=1;
	for(;b;b>>=1,a=a*a) if(b&1) res=res*a;
	return res;
}
int solve(int l,int r){
	m=r-l+1;ll s=0;
	seg.clear(),d.clear();
	for(int i=l;i<=r;i++){
		seg.emplace_back(s+(a[i]<0?-1:1),s+a[i]);
		s+=a[i];
	}
	seg[0].fi=0;
	for(int i=0;i<seg.size();i++){
		d.push_back(seg[i].fi-1);
		d.push_back(seg[i].fi);
		d.push_back(seg[i].fi+1);
		d.push_back(seg[i].se-1);
		d.push_back(seg[i].se);
		d.push_back(seg[i].se+1);
	}	
	sort(d.begin(),d.end());
	d.erase(unique(d.begin(),d.end()),d.end());d.pop_back();
	Mat ans;ans.a[0][0]=1;
	ll la=-1;
	for(int i=0;i<d.size();i++){
		Mat t;
		for(int j=0;j<seg.size();j++){
			if(min(seg[j].fi,seg[j].se)<=la+1&&max(seg[j].fi,seg[j].se)>=d[i]){
				if(seg[j].fi<seg[j].se) {
					for(int k=0;k<=j;k++) t.a[k][j]=1;
				}else {
					for(int k=0;k<j;k++) t.a[k][j]=1;
				}
			}
		}
		t=qpow(t,d[i]-la);
		ans=ans*t;
		la=d[i];
	}
	int res=0;
	for(int i=0;i<=m;i++) add(res,ans.a[0][i]);
	return res;
}
int main(){
	scanf("%d%d",&n,&x);
	for(int i=1;i<=n;i++){
		scanf("%d",&x);
		if(x) a[++l]=x;
	}
	n=l;
	ll sum=0;
	for(int i=1;i<=n;i++){
		ll t=sum;
		for(int j=i;j<=n;j++){
			t+=a[j];
			ans=max(ans,t-sum);
		}
		sum+=a[i];
	}
	if(ans==0){
		ll res=1;
		for(int i=1;i<=n;i++) res-=a[i];
		printf("%lld %lld",ans+1,res%mod);
		return 0;
	}
	sum=0;int res=0;
	for(int i=1;i<=n;i++){
		ll t=sum;int p=-1;
		for(int j=i;j<=n;j++){
			t+=a[j];
			if(t-sum==ans) p=j;
		}
		sum+=a[i];
		if(p!=-1){
			//cout<<i<<' '<<p<<endl;
			add(res,solve(i,p));
			i=p;
		}
	}
	printf("%lld %d",ans+1,res);
	return 0;
}