and then 3) a custom list/whatever that holds the ...
# general
b
and then 3) a custom list/whatever that holds the available items (which is a list/record field on the line-item)