Approach to find minimum set in one table consisting of all items in second table wondering if you can help me with the following problem.

I have one table consisting of items in each person's bag:

name  |  item1  |  item2  |  item3
____________________________________
jack  | pen     | pencil  | eraser
____________________________________
jane  | phone   | pen     | camera 
____________________________________
leia  | pencil  | eraser  | glasses


I have another list with all items that can be in a bag:


pen
pencil
eraser
phone
camera
glasses


What is the best approach to find the minimum list of names who have all the items in the list? For example, in this toy example, the output would be {jane,leia}.

Your help is much appreciated. Please also let me know if I should formulate the problem differently.
This is essentially the Set Cover problem, which is NP-hard, so you should not expect an algorithm that is always both exact and efficient (polynomial-time). 

If you really need the minimum set, you have to resort to algorithms that sooner or later have to explore an exponentially large solution space. You might want to cast your problem as an Integer Linear Program (ILP) and use an ILP solver, or cast it as a Satisfiability (SAT) problem and use a SAT solver. If you want to implement the algorithm yourself from scratch, I suggest you have a look into branch and bound methods. 

If you don't really need the minimum cardinality set, you can just greedily pick a name that covers as many as possible uncovered items, mark them covered, and repeat, until all items are covered. This won't do too bad, in a specific theoretical sense, although in practice it may be a relatively low quality solution.