Matching two lists of different sizes with exceptions?
This is an instance of bipartite matching.  Build a graph where each left vertex represents one item from the larger list.  Duplicate each element in the smaller list the minimum number (e.g., if you want no item from the smaller list to appear more than twice, duplicate each item in the smaller list twice), then use one right vertex for each such (duplicated) item.  Draw an edge between items if they are not a forbidden pairing.  Then, use any standard algorithm (e.g., the Hungarian algorithm) to search for a perfect matching in this bipartite graph.