using System.Collections;
using System.Collections.Generic;
public static void Main()
Console.WriteLine(string.Join(" ", allPossibleSums(new[]{10,20,30,100,-1000})));
public static int[] allPossibleSums(int[] arr) {
var sums = new HashSet<int>();
arr = arr.Distinct().ToArray();
for (int i = 0; i < arr.Length-1; i++)
possibleSumsRecursive(arr, arr[i], i+1, sums);
return sums.OrderBy(n => n).ToArray();
private static void possibleSumsRecursive(int[] arr, int currentSum, int startIndex, HashSet<int> sums) {
for (int i = startIndex; i < arr.Length; i++) {
var sum = currentSum + arr[i];
possibleSumsRecursive(arr, sum, i+1, sums);