The basic idea is
TO DIRECT OUTGOING LAN TRAFFIC OUT A SPECIFIC WANIP
NEED DEFAULT ROUTES
dst-address=0.0.0.0/0 gwy=wan1-gwy table=main distance=1 check-gateway=ping
dst-address=0.0.0.0/0 gwy=wan2-gwy table=main distance=2 check-gateway=ping
dst-address=0.0.0.0/0 gwy=wan3-gwy table=main distance=3 check-gateway=ping
Now you can use this approach with distance to direct all users out 1, if 1 is down they go to 2, and if 2 is down they go to 3.
Then for specifc subnets to work around this you can use the below rules as well!
OR
If each WANIP needs a specific LANSUBNET ONLY and no failover needed then.........
dst-address=0.0.0.0/0 gwy=wan1-gwy table=main distance=1
dst-address=0.0.0.0/0 gwy=wan2-gwy table=main distance=1
dst-address=0.0.0.0/0 gwy=wan3-gwy table=main distance=1
Lets take the latter case and we have subnets A, B, C and A goes to 1, B goes to 2, and C goes to 3.
First step need 3 tables...
/routing table
add name=use-WAN1 fib
add name=use-WAN2 fib
add name=use-WAN3 fib
Second step need 3 additional routes to go along with the defaults.
add dst-address=0.0.0.0/0 gwy=WAN1-gwy table=use-WAN1
add dst-address=0.0.0.0/0 gwy=WAN2-gwy table=use-WAN2
add dst-address=0.0.0.0/0 gwy=WAN3-gwy table=use-WAN3
Then three routing rules.......
add src-address=subnetA action=lookup-only-in-table table=use-WAN1
add src-address=subnetB action=lookup-only-in-table table=use-WAN2
add src-address=subnetC action=lookup-only-in-table table=use-WAN3
If one wanted a subnet to go out another WAN if their WAN was not available for some reason, change action to
action=lookup and the router will go to the main table to see if any other routes are available/working.
+++++++++++++++++++++++++++++++++++++++++++++++++++++
Yuu should note that by using distance you can force all users to that WAN1 and thus dont need another route or table or route rule for any subnet needing this route direction.
However if you didnt want subnets to deviate to other subnets as failover, then no requirement for a distance approach. I like it because it can be more efficient and useful but each scenario is slightly different and nuanced.
++++++++++++++++++++++++++++++++++++++++++++++++++++
Another point, this DOES NOT cover the requirements where both incoming and outgoing traffic are involved. If you have traffic coming in on a particular WAN and you have adjusted the outgoing traffic rules, there may be a conflict. Therefore when controlling traffic both ways one really has to get into the mangle game to identify the traffic coming in on a particular wan to ensure it goes out the same wan.
Final point: Be careful of directing LAN users by the above method. IF you need LAN subnet A, to also be able to talk to SUBNET B, they will never reach B as you forced them out WAN1.
If you need internal traffic for subnets then simply add additional ROUTING RULES BEFORE (order counts) the wan rules.
ex.
add dst-address=subnetA action=lookup-only-in-table table=main { all subnets need access to LAN A }
add src-address=subnetA action=lookup-only-in-table table=use-WAN1
add src-address=subnetB action=lookup-only-in-table table=use-WAN2
add dst-address=subnetB src-address=subnetC action=lookup-only-in-table table=main { subnet C needs access to subnet B }
add src-address=subnetC action=lookup-only-in-table table=use-WAN3
note1: if your paying attention I don't really need the src-address=subnet C in the second addition, as the rule placement kinda will only effect subnet C anyway.

note2. still need appropriate firewall rules.