import sys
def solve():
# Быстрое чтение входных данных
input_data = sys.stdin.read().split()
if not input_data:
return
n = int(input_data[0])
s_target = int(input_data[1])
k_limit = int(input_data[2])
# Номиналы монет
coins = list(map(int, input_data[3:]))
mod = 10**9 + 7
# dp[k][s] - количество способов набрать сумму s используя ровно k монет
# Инициализируем таблицу нулями
dp = [[0] * (s_target + 1) for _ in range(k_limit + 1)]
# Базовый случай: 0 монет дают сумму 0
dp[0][0] = 1
# Порядок обхода: сначала количество монет, потом номиналы, потом суммы.
# Это позволяет корректно учитывать "ровно K монет".
for k in range(1, k_limit + 1):
current_dp_k = dp[k]
prev_dp_k = dp[k-1]
for coin in coins:
for s in range(coin, s_target + 1):
# Способы получить сумму s из k монет с использованием текущей монеты
# складываются из способов получить s-coin из k-1 монет
current_dp_k[s] = (current_dp_k[s] + prev_dp_k[s - coin]) % mod
# Результат — количество способов набрать S ровно K монетами
print(dp[k_limit][s_target])
if __name__ == "__main__":
solve()