Not sure if it will work in your case but in general sometimes routing can be done without mangling!!
a. create all required routes on the main table.
standard route for internet
route for tv1
route for tv2
route for tv3
Now if you need special control of which subnets use the routes (and quite frankly not sure if the subnet is a source address or destination address in this case or an interface so you will have to determine that part)
Then create three more routes exact copies of the main table routes but with route-marking
route for tv1 route-marking=useD1
route for tv2 route-marking=useD2
route for tv3 route-markng=useD3
Then create associated Route Rules
Entry argument: source-address=subnet L2TP-1 (or destination-address=subnet L2TP-1) (or interface=L2TP-1)
Action= Lookup only in table
Table= useD1
Entry argument: source-address=subnet L2TP-2 (or destination-address=subnet L2TP-2) (or interface=L2TP-2)
Action= Lookup only in table
Table= useD2
Entry argument: source-address=subnet L2TP-3 (or destination-address=subnet L2TP-3) (or interface=L2TP-3)
Action= Lookup only in table
Table= useD3
I have made these configurations but pinging the World is not working.
I have renamed TV1 to ROOM1 for better understanding. And D1-D3 are just names of the L2TP interfaces (it does not come from word destination, routing is based only on source address).
For simplicity here is the code I have launched for the first room: