How to schedule events optimally given when the events are available?
I assume that by "optimally" you mean using the least number of periods. Thirst thing is that you can renumerate the dictionary such that there are no gaps in available periods, so:

$$
\text{Event 1} \rightarrow\ [1, 2, 10]\\
\text{Event 2} \rightarrow\ [3, 5, 11, 12]\\
$$

becomes

$$
\text{Event 1} \rightarrow\ [1, 2, 5]\\
\text{Event 2} \rightarrow\ [3, 4, 6, 7]\\
$$

So now the largest number on the right side is not greater then the sum of sizes of lists on the right side. Assume that, there are $n$ events and sum of sizes of lists on the right side is $m$. Now to check if there is a solution, which uses only first $i$ periods we can reduce the lists to the numbers smaller or equal to $i$, so for $i=4$ this example will change to:
$$
\text{Event 1} \rightarrow\ [1, 2]\\
\text{Event 2} \rightarrow\ [3, 4]\\
$$
Now to check if there is a solution for given $i$ we can create bipartite graph with events on one side, periods on the other side and edges between event $e$ and period $p$ if $e$ is available during $p$. If there is matching of size equal to $n$ in this graph then we can schedule events using only first $i$ periods. If we find smallest $i$ with such property then we have a solution to our original problem. It's easy to see that if there is such matching for $i$ then there is also for $i+1$, so we can use binary search to find smallest $i$. This solution will work in time $O(m\sqrt{n+m}\log{m})$ where $O(m\sqrt{n+m})$ comes from finding matching and $O(\log{m})$ comes from binary search.