procedure sumasub(S, M): C = ordenar_decreciente(S) while C[1] > M: remover(C, 1) sumasub(C, $\emptyset$, M) procedure buscar(C[1..n], L, M): if M = 0: mostrar(L) return if $\sumc < M$: return while C[1] > M: remover(C, 1) while $C \neq \emptyset$: nuevo $\asig$ C[1] remover(C, 1) buscar(C, L $\cup$ {nuevo}, M-nuevo) return