We've got something fairly similar in an app I'm working on, where we have a menu which allows you to jump to any page in the top-level flow from any of the subflows.
It works by having a global transition in the subflows which catches any unhandled transitions (i.e. the events from the menu), and propagates then out to the top-level flow, which then transitions to whatever they asked for.
Each of the subflows that can be jumped out of has the following
Code:
<global-transitions>
<transition on="*" to="menuNavigationState">
<set attribute="menuNavigationEvent" scope="conversation" value="${lastEvent}"/>
</transition>
</global-transitions>
<end-state id="menuNavigationState"/>
which saves the current event to a conversation scope variable (you could probably use an output mapper to do this, if you wanted).
The top-level flow then has a global transition which catches the "menuNavigationEvent" transition, and dispatches according to what was actually selected. What I've got below isn't how our app actually works, as we're got a navigation TargetStateResolver which does additional things like checking that you're allowed to go to the state, but conceptually it's like it.
Code:
<global-transitions>
<transition on="menuNavigation" to "navigationDispatchState"/>
</global-transitions>
<decision-state>
<if test="${conversationScope.menuNavigationEvent.id eq 'here'}" then="here"/>
<if test="${conversationScope.menuNavigationEvent.id eq 'there'}" then="there"/>
</decision-state>
To launch subflow C, you'd just transition to a subflow state which starts it from the navigation dispatcher.