Since there is no direct restriction on which drivers can be on which routes, we can just solve two independent problems:
1. Which drivers are assigned to which buses.
2. Which buses are assigned to which routes.
Each problem is a separate instance of finding a perfect matching in a bipartite graph, which we know can be checked efficiently#In_unweighted_bipartite_graphs).
A more general problem, finding a 3-dimensional matching, _is_ NP-complete. But here, our restrictions are that we have a set of allowed triples of driver, bus, and route. For example, we could have a triple $(C_1,B_1,R_1)$ and $(C_2,B_1,R_2)$, saying that driver $C_1$ can drive bus $B_1$ on route $R_1$, or another driver $C_2$ can drive the same bus $B_1$ on route $R_2$. This is strictly more general, because we can allow these two triples without allowing the triple $(C_1, B_1, R_2)$: whether or not bus $B_1$ can drive on route $R_2$ in this version of the problem can depend on who is driving it.