小红的红蓝硬币
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

小红有n个硬币,其中一些硬币为红色,另外一些为蓝色。每个硬币有一个面值(保证所有硬币的面值不同)。
小红想选择一些硬币凑出总面值为p,且至少有一个红硬币和至少一个蓝硬币,你能她求出选择的方案数吗?答案对10^9+7取模。

提示:建议python考生使用pypy提交。

输入描述:

第一行输入两个正整数np,用空格隔开。
第二行输入一个仅包含'R'和'B'的字符串,第i个字符为'R'代表第i个硬币为红色,'B'代表蓝色。
第三行输入n个正整数a_i,代表每个硬币的面值。
1\leq n,a_i \leq 1000
1\leq p \leq 10000

输出描述:

一个正整数,代表方案数对10^9+7取模的值。
示例1

输入

复制
5 10
BBRRR
1 2 3 6 8

输出

复制
2

说明

1(蓝色)+3(红色)+6(红色)
2(蓝色)+8(红色)
示例2

输入

复制
5 10
RRRRR
1 2 3 6 8

输出

复制
0

说明

所有硬币都是红色,因此没有合法的方案。