从事大型项目的程序员刚刚收到了一项任务,即编写恰好 m 行代码。 有 n 个程序员在做一个项目,他们中的第 i 个在他编写的每一行代码中都制造了 ai 个错误。
如果 v1 + v2 + ... + vn = m,我们称一个非负整数序列 v1, v2, ..., vn 为计划。 程序员遵循这样的计划:一开始,第一个程序员写给定任务的前 v1 行,然后第二个程序员写给定任务的 v2 多行,以此类推。 最后,最后一个程序员编写剩下的代码行。 如果任务的所有书面行总共包含最多 b 个错误,我们就称计划为好。
你的任务是确定有多少不同的好计划。 由于计划的数量可能很大,打印这个数字的余数模给定正整数模。
第一行包含四个整数 n, m, b, mod (1 ≤ n, m ≤ 500, 0 ≤ b ≤ 500; 1 ≤ mod ≤ 10^9 + 7)——程序员的数量,程序中的代码行数 任务,错误的最大总数和打印答案时应该使用的模数。
下一行包含 n 个空格分隔的整数 a1, a2, ..., an (0 ≤ ai ≤ 500) — 每个程序员每行的错误数。
打印一个整数表示问题的答案
3 3 3 100
1 1 1
10
3 6 5 1000000007
1 2 3
0
3 5 6 11
1 2 1
0