I have a small class for you. I hope, it helps :)
Here the program:
var finder = new NumbersForTotalFinder(Enumerable.Range(1, 65));
var results = finder.Find(10);
Debug.Assert(results.All(a => a.Sum() == 10));
and here the finder
class NumbersForTotalFinder
{
    public NumbersForTotalFinder(IEnumerable<int> numbers)
    {
        _numbers = numbers.OrderBy(n => n).ToArray();
    }
    public List<int[]> Find(int total)
    {
        var results = new List<int[]>();
        var temp = new int[_numbers.Length];
        for (var index = 0; index < _numbers.Length; index++)
        {
            var num = _numbers[index];
            temp[0] = num;
            if (num == total)
            {
                SaveResult(results, temp, 1);
            }
            if (num >= total)
            {
                break;
            }
            Check(index + 1, 1, num, total, results, temp);
        }
        return results;
    }
    private void Check(int index, int depth, int sum, int total, List<int[]> results, int[] temp)
    {
        while (index < _numbers.Length)
        {
            var newNum = _numbers[index];
            var newSum = sum + newNum;
            if (newSum > total)
            {
                break;
            }
            temp[depth] = newNum;
            if (newSum == total)
            {
                SaveResult(results, temp, depth + 1);
                break;
            }
            Check(index + 1, depth + 1, newSum, total, results, temp);
            index++;
        }
    }
    private void SaveResult(List<int[]> results, int[] temp, int length)
    {
        var newResult = new int[length];
        Array.Copy(temp, newResult, length);
        results.Add(newResult);
    }
    private int[] _numbers;
}