r = []
def fun(a,target,val):
if target == 0:
r.append(val)
else:
for i in range (len(a)):
if target > 0:
fun(a[i:],target-a[i],val+[a[i]])
else:
break
return r