#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <math.h>
#include <bitset>
#include <algorithm>
#include <climits>
using namespace std;
const int N=1e5+10;
const int mod=998244353;
#define int long long
int n,dp[N][105],a[N],k,k2,maxi[105];
int _gcd(int x,int y){
if(y==0) return x;
else return _gcd(y,x%y);
}
int32_t main(){
scanf("%lld%lld%lld",&n,&k,&k2);
for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
int p=(k*k2)/_gcd(k,k2);
for(int i=0;i<p;i++) maxi[i]=-1e18;
for(int i=1;i<=n;i++){
int now2=(a[i]%p+p)%p;
for(int j=0;j<p;j++) dp[i][j]=dp[i-1][j];
for(int j=1;j<p;j++){
int now=(j+a[i]%p+p)%p;
if(maxi[j]!=-1e18){
maxi[now]=maxi[j]+a[i];
}
dp[i][now]=(dp[i][now]+dp[i-1][j])%mod;
}
dp[i][now2]++;
if(maxi[now2]==-1e18) maxi[now2]=now2;
for(int j=0;j<p;j++){
cout<<dp[i][j]<<" ";
}cout<<endl;
}
int ans=0,res=0;
for(int i=1;i<p;i++){
if(i%k==0&&i%k2!=0&&dp[n][i]){
ans=dp[n][i];res=i;
}
}
cout<<maxi[res]<<" "<<ans<<endl;
}