N, W, K = map(int, input().split()) A = list(map(int, input().split())) MOD = 10**9 + 7 # Compute a (ways to reach W with sum W) target_a = W dp_a = [0] * (target_a + 1) dp_a[0] = 1 for s in range(target_a + 1): for a_j in A: next_s = s + a_j if next_s > target_a: continue dp_a[next_s] = (dp_a[next_s] + dp_a[s]) % MOD a = dp_a[target_a] # Compute b (ways to reach 2W without hitting W) target_b = 2 * W dp_b = [0] * (target_b + 1) dp_b[0] = 1 for s in range(target_b + 1): for a_j in A: next_s = s + a_j if next_s > target_b or next_s == W: continue dp_b[next_s] = (dp_b[next_s] + dp_b[s]) % MOD b = dp_b[target_b] def multiply(m1, m2): a = (m1[0][0] * m2[0][0] + m1[0][1] * m2[1][0]) % MOD b = (m1[0][0] * m2[0][1] + m1[0][1] * m2[1][1]) % MOD c = (m1[1][0] * m2[0][0] + m1[1][1] * m2[1][0]) % MOD d = (m1[1][0] * m2[0][1] + m1[1][1] * m2[1][1]) % MOD return [[a, b], [c, d]] def matrix_power(mat, power): result = [[1, 0], [0, 1]] # Identity matrix while power > 0: if power % 2 == 1: result = multiply(result, mat) mat = multiply(mat, mat) power //= 2 return result if K == 0: print(1 % MOD) elif K == 1: print(a % MOD) else: matrix = [[a, b], [1, 0]] powered = matrix_power(matrix, K - 1) ans = (powered[0][0] * a + powered[0][1] * 1) % MOD print(ans)