Weiß nicht, ob ich deinen Code richtig verstehe, aber ich glaube, der findet nicht immer eine Lösung:
Probier mal
Code:
List<int> MengeA = new List<int>(new int[] { 5, 5, 6, 15 });
List<int> MengeB = new List<int>(new int[] { 16 });
Ist aber eine gängige, schnelle Näherungslösung für das Rucksackproblem, soweit ich weiß.