#CF1185G2. 播放列表(困难版)

播放列表(困难版)

播放列表(困难版)

  • 时间限制:5 秒
  • 内存限制:256 MiB

题目描述

你有 nn 首彼此不同的歌曲。第 ii 首歌曲的时长为 tit_i,曲风编号为 gig_i。

请选择若干首歌曲并排成一个播放列表。每首歌曲至多选择一次,并且播放列表需要同时满足:

  • 所选歌曲的总时长恰好为 TT;
  • 任意两首相邻歌曲的曲风编号不同。

求合法播放列表的数量。由于答案可能很大,请输出答案对 109+710^9+7 取模后的结果。

输入格式

第一行包含两个整数 n,Tn,T。

接下来 nn 行,每行包含两个整数 ti,git_i,g_i,分别表示第 ii 首歌曲的时长和曲风编号。

输出格式

输出一个整数,表示合法播放列表的数量对 109+710^9+7 取模后的结果。

样例输入 1

3 3
1 1
1 2
1 3

样例输出 1

6

样例输入 2

3 3
1 1
1 1
1 3

样例输出 2

2

样例输入 3

4 10
5 3
2 1
3 2
5 1

样例输出 3

10

数据范围

1≤n≤501\le n\le 50,1≤T≤25001\le T\le 2500,1≤ti≤501\le t_i\le 50,1≤gi≤31\le g_i\le 3。

子任务编号 分值 特殊限制
1 30 n≤15n\le15
2 n≤25n\le25 且 T≤300T\le300
3 40 无特殊限制

每个测试点独立计分。