A possible solution would be a recursive algorithm:
To find all sums of elements in a list [a, b, c, d, ...] less than X, find all such sums in [b, c, d, ...] and if they are also less than X-a, duplicate them and add a to the duplicates. Notice that the intermediate list of sums will have to include sums of 1 and 0 elements. You'd have to ignore them when producing the result.
I assume the same algorithm can be implemented in different ways to be space or time efficient.