My idea would be to iterate through the list, but to keep three candidates in three variables. Then, as you progress through the list, you substitute them with new values based in order to approach the required value.
For example:
c1 = 1; c2 = 2; c3 = 3; 1+2+3 =/= 8
next element is 4
try to substitute the smallest candidate, in this case c1: 4+2+3 > 8
try the next one, c2: 1+4+3 ==8
end
THe idea is to substitute a candidate based on how much the new some would approach, but not exceed, the desired value.
If you iterate through the whole list, but found no suitable match, you can either run another iteration to be sure, or proclaim that the list does not contain any such numbers. This depends largely on whether the list is sorted.
This algorithm probably needs refinement, it's just from the top of my head, but I think it conveys an idea, which you can use.
Hope it helps.