### 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