def subset_with_values(target, lst):
    'Determines whether or not it is possible to create the target sum using\n    values in the list. Values in the list can be positive, negative, or zero.\n    The function returns a tuple of exactly two items. The first is a boolean,\n    that indicates true if the sum is possible and false if it is not. The second\n    element in the tuple is a list of all values that add up to make the target sum.'
    if (target == 0):
        return (True, [])
    if (lst == []):
        return (False, [])
    use_it = subset_with_values((target - lst[0]), lst[1:])
    if use_it[0]:
        return (True, ([lst[0]] + use_it[1]))
    return subset_with_values(target, lst[1:])
Determines whether or not it is possible to create the target sum using
values in the list. Values in the list can be positive, negative, or zero.
The function returns a tuple of exactly two items. The first is a boolean,
that indicates true if the sum is possible and false if it is not. The second
element in the tuple is a list of all values that add up to make the target sum.
def subset_with_values(target, lst):
    'Determines whether or not it is possible to create the target sum using\n    values in the list. Values in the list can be positive, negative, or zero.\n    The function returns a tuple of exactly two items. The first is a boolean,\n    that indicates true if the sum is possible and false if it is not. The second\n    element in the tuple is a list of all values that add up to make the target sum.'
    if (target == 0):
        return (True, [])
    if (lst == []):
        return (False, [])
    use_it = subset_with_values((target - lst[0]), lst[1:])
    if use_it[0]:
        return (True, ([lst[0]] + use_it[1]))
    return subset_with_values(target, lst[1:])