#dwacon2018prelimsc. [dwacon2018_prelims_c]Kill/Death

[dwacon2018_prelims_c]Kill/Death

题目描述:

dwango的成员nwango同学很喜欢游戏。他今天在玩一个这样的游戏:

  • 游戏分两队进行: NN 个人在A队, MM 个人在B队。
  • 各玩家在游戏中要攻击敌方的玩家。
  • 玩家攻击成功时,该玩家 killkill 数+1,被攻击玩家 deathdeath 数+1。
  • 双方都可以在攻击后继续战斗并且仍然可以被攻击。
  • 一个玩家可以多次攻击同一玩家,但是不可以攻击队友。
  • 游戏开始时,所有的 killkill 数和 deathdeath 数都是0。

nwango同学在游戏结束后记录了结果,记录的格式为:
A队的kill数:killA1,killA2,,killANkillA_1,killA_2,\dots,killA_N
A队的death数:deathA1,deathA2,,deathANdeathA_1,deathA_2,\dots,deathA_N
B队同理。

nwango同学想通过记录的 killkill 数来还原 deathdeath 数,请共有多少种不同方案(有多少种不同的可能 deathdeath 数序列)。 答案可能非常大,请对 109+710^9 + 7 取模。

输入格式:
第一行两个整数NN,MM,表示两队人数
接下来一行 NN 个整数,表示A队各玩家 killkill
接下来一行 MM 个整数,表示B队各玩家 killkill

输出格式:
一行一个整数,即所求答案。

样例:
样例1

4 1
0 0 0 0
5
6

样例2

4 1
3 2 1 0
5
56

样例3

4 4
2 1 1 1
1 1 1 1
66

样例4

4 4
5 5 4 3
5 4 4 3
322875

样例5

5 5
100 100 100 100 100
50 50 50 50 50
331829279

数据范围:
1N,M1001 \le N,M \le 100
0killAi,killBi0 \le killA_i,killB_i
i=1NkillAi103\sum_{i=1}^N killA_i \le 10^3
i=1NkillBi103\sum_{i=1}^N killB_i \le 10^3
两序列数据各从大到小排序。