# TwoSamp-q2
# Sections 31-32, Q.2, p.116, p.267

D = [0,  0,  8, 10, 10, 11, 14, 14, 14, 14, 
    14, 16, 16, 18, 19, 20, 21, 22, 27 ]   
     # added an 0 at start
n = len(D)
K = 9 
S = 107
# q[n][K][S]
q = [[[0 for z in range(S+1)] for y in range(K+1)] for x in range(n)]
for x in range(n):
  for z in range(S+1):
    q[x][0][z] = 1

for y in range(1,K+1):
  for x in range(y,n):
    for z in range(S+1):
      if z >= D[x]:
        q[x][y][z] = q[x-1][y][z] + q[x-1][y-1][z-D[x]]
      else:
        q[x][y][z] = q[x-1][y][z]
print("q ==", q[n-1][K][S])
