Seleccionar elementos de una lista para lograr una suma

Tengo una lista de elementos que tiene valores numéricos y necesito lograr una suma usando estos elementos. Necesito tu ayuda para construir tal algoritmo. A continuación, hay una muestra que describe mi problema, escrita en 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: no tengo restricciones en cuanto al número de elementos en el resultado.

Respuestas a la pregunta(4)

Su respuesta a la pregunta