From your description, I believe all three of your virtual services should run in DYNAMIC mode. Your Virtual Service Execution Router steps should contain a small script to parse typeOfCar and return LIVE or EFFICIENT depending on whether the value of typeOfCar matches the required value.
Some people like to parse the lisa.vse.request object in that step. I prefer to create a request-side Scriptable DPH to grab the typeOfCar argument and use testExec.setStateValue() to store a DevTest property from it that I can query against in the Router step.
My Scriptable DPH would be something like this:
%beanshell%
import com.itko.util.ParameterList;
import com.itko.util.Parameter; //Do I need this for such a simple DPH?
ParameterList args = lisa_vse_request.getArguments();
typeOfCar = args.getParameterValue("complete_argument_path_to_typeOfCar");
testExec.setStateValue("typeOfCar", typeOfCar);
My Virtual Service Execution Router script (for VS1, which wants "Skoda") would have something like this:
import com.itko.lisa.vse.ExecutionMode;
typeOfCar = testExec.getStateString("typeOfCar", "noCar");
if(typeOfCar.equals("Skoda"))
return executionMode.EFFICIENT;
return executionMode.LIVE;
For the other virtual services, change "Skoda" in the router step for the car that you want to match against. Your virtual services will respond if they are the correct car, or drop through to live if not.
The scripts above haven't been checked for syntax or logic.
Message selectors should fail to respond if there's not a match, but your situation looks different, so I think you'll need to put a bit of thought into the circumstances where no response is made (i.e.: my suggestions above about responding on throwaway queues).