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