from collections import Counter
import math

N, K = map(int, input().split())
ws = list(map(int, input().split()))

free = [ 0 ] * (K + 1)
for w in ws:
    free[ w ] += 1
free_orig = free[:]


solved = {}
def solve(cnt, gt, le, free, fr, summ):
#    print(cnt, gt, le, free, fr)
    if summ <= gt:
        return 0
    if le < 0:
        return 0
    if cnt == 0:
        return int(gt < 0 and le >= 0)

    free_orig = free[:]
    coded = (cnt, gt, le, tuple(free))

    if coded in solved:
        return solved[coded]

    result = 0
    for w in range(fr, K+1):
        if free[w] == 0:
            continue
        amount_orig = free[w]
        for amount in range(1, free[w] + 1):
            free[w] -= 1
            # choose amount from amount_orig
            result += solve(cnt - amount,
                            gt - w * amount,
                            le - w * amount,
                            free,
                            w + 1,
                            summ - w * amount
            ) * math.comb(amount_orig, amount)
    for w in range(fr, K+1):
        free[w] = free_orig[w]

    solved[coded] = result
    return result


summ = sum(ws)
for i in range(N):
    sol = []
    for j in range(1, N):
        free[ ws[i] ] -= 1
        s = solve(j, K - ws[i], K, free, 1, summ - ws[i])
        free[ ws[i] ] += 1
        sol.append(s % 167772161)
    print(' '.join(map(str, sol)))
