Загрузка данных


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 = [[0] * (s_target + 1) for _ in range(k_limit + 1)]
    dp[0][0] = 1
    
    # ПРАВИЛЬНЫЙ ПОРЯДОК: сначала фиксируем монету
    for coin in coins:
        # Затем итерируемся по количеству монет и сумме
        for k in range(1, k_limit + 1):
            for s in range(coin, s_target + 1):
                dp[k][s] = (dp[k][s] + dp[k-1][s - coin]) % mod
                
    print(dp[k_limit][s_target])

if __name__ == "__main__":
    solve()