###Ruby, 136 characters###
Ruby, 136 characters
a,*b=*$<
c=->s,u,e{f,*r=e;f ?(0..s/h=f.to_i).map{|n|c[s-n*h,u+[n.to_s+f[/ .*/]],r]}:s>0?[]:u*?,}
r=c[a.to_i,[],b].flatten
puts r[0]?r:?X
Input must be given on STDIN, one line for the total amount and then one line per item (weight, followed by space, followed by name).
Example input:
250
35 Portal 2
21 Minecraft
12 Braid
Output:
2 Portal 2,0 Minecraft,15 Braid
2 Portal 2,4 Minecraft,8 Braid
2 Portal 2,8 Minecraft,1 Braid
5 Portal 2,3 Minecraft,1 Braid