Selecionando itens de uma lista para obter uma soma

Eu tenho uma lista de itens que possui valores numéricos e preciso obter uma soma usando esses itens. Preciso da sua ajuda para criar esse algoritmo. Abaixo, há um exemplo que descreve meu problema, escrito em C #:

int sum = 21;

List<Item> list = new List<Item>();
list.Add(new Item() { Id = Guid.NewGuid(), Value = 3 });
list.Add(new Item() { Id = Guid.NewGuid(), Value = 5 });
list.Add(new Item() { Id = Guid.NewGuid(), Value = 12 });
list.Add(new Item() { Id = Guid.NewGuid(), Value = 3 });
list.Add(new Item() { Id = Guid.NewGuid(), Value = 2 });
list.Add(new Item() { Id = Guid.NewGuid(), Value = 7 });

List<Item> result = // the items in the list that has the defined sum.

Nota: Não tenho restrição no número de itens no resultado.

questionAnswers(4)

yourAnswerToTheQuestion