#pragma GCC target("avx2") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #include using namespace std; int main(){ int N, M, C; cin >> N >> M >> C; vector A(N); for (int i = 0; i < N; i++){ cin >> A[i]; } int S = 0; for (int i = 0; i < N; i++){ S += A[i]; } vector> dp(N + 1, vector(S + 1, 0)); vector> dp2(N + 1, vector(S + 1, 0)); dp[0][0] = 1; int T = 0; for (int i = 0; i < N; i++){ for (int j = 0; j <= i + 1; j++){ for (int k = 0; k <= T + A[i]; k++){ dp2[j][k] = 0; } } for (int j = 0; j <= i; j++){ for (int k = 0; k <= T; k++){ dp2[j][k] += dp[j][k]; if (dp2[j][k] >= M){ dp2[j][k] -= M; } dp2[j + 1][k + A[i]] += dp[j][k]; } } T += A[i]; swap(dp, dp2); } for (int i = 1; i <= S; i++){ cout << dp[C][i]; if (i < S){ cout << ' '; } } cout << endl; }