A) Well, if you do not have a very long list. This will be very annoying if you have many, many items. Bad because it is not searchable, unlike option B.
B) Good, because it does not require the user to understand while holding control. Because of this, the user will also not be able to accidentally clear his choice, which is certainly good. It will also display much more clearly which options you have chosen. Good, because you can group related parameters under one heading or another graphical indicator. This approach will work without JS, with the exception of the select all button, the select none button can be executed using the input type = "reset".
C) I think this can be useful if the user explicitly adds to the list instead of selecting options. But, as you say, it will not function without JS. Instead, I would consider A and B. Also not searchable unless you provide a custom filter (which again depends on JS)
source share