CCA的序列
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

有一个长度为 n 的整数序列,序列中的元素都从 [1,k] 中选择 。
现在你要将这个序列的长度扩充到 n+m ,即你需要从 [1,k] 中选择一些数填充到原序列的后面 m 位 。
你需要求出扩充后的序列的不同子序列的数量的最大值对 10^9+7 取模后的值 。

输入描述:

第一行三个整数 n,m,k 。
第二行 n 个正整数表示原序列 。

输出描述:

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

输入

复制
2 1 3
1 2

输出

复制
7

说明

最优方案是把序列变成 1 2 3,这样不同的子序列有 7 中,分别为 [1],[2],[3],[1,2],[1,3],[2,3],[1,2,3] 。

备注:

n <= 10^6,m <= 10^18,k <= 100 。