What happens when multiple context conditions match?
Context starts from top and moves downward on all your created contexts and will stop on the first one to trigger it. This is why your context A is being displayed.

You have a few options...


Set a required condition to your context A as "Default Context" this way it will only trigger if no other contexts were found.
Make a few MAIN contexts that apply to many different cases for example, cache 1day, cache 5 days, cache 2hours, etc. The tag you can start with z_caches or something like that and put no conditions to these cache contexts, only the reactions. Note this will move them all the way down and you may think they will never apply... wait... now go to a main context for example, article_type and there you add a condition of "context (any or all)" and add the cache context you already created to that list. That way all article content types will automagically first add the context cache you want applied within this context. This way the page will stop on only one context, yet that one context contains multiple contexts within it. This is perhaps the best solution in most cases that need to apply multiple contexts or share conditions. Seeing your example, you can also create a "Domain" context like we did cache and apply it to whatever contexts you want and easily edit any of the included contexts without having to create so many different contexts since you are sharing some contexts that you know will be common. Cache, Http headers, delta (for theme layouts), domains, language, etc. These are all possible conditions that people may see themselves repeating on multiple contexts, but if you ever need to edit any of these, you have to go one by one to every context you added them and edit that field. However, if you use this method of sharing or including/excluding other contexts within your context, you only have to edit that one particular context that was included and will apply to all contexts referencing it.
Reorder your contexts in the order you want them triggered from top to bottom. The easy way to do this is by using the "clone" link when viewing all your contexts. Simply clone it and change the "tag" field (second field above the description) and you can start all your tags with numbers (like weights) and that will get the contexts in the order you need.


*NOTE: For point #2, you can use the "context all" or "context any" conditions to display or not display (not display using ~) any other contexts or the "context_disable_context" module which will allow you to select which contexts to omit.

In summary, using context is similar to using Path Breadcrumbs for example, in the sense that you have to plan ahead the hierarchy of importance from top to bottom of anything you create and know it will stop on the first item if true. 

See your example, and you will see that in fact domain B and C when seeing context A, are in fact true, that is why it stops there (both domain B and C have a  page). If however, you follow my option #3 and reorder A to the bottom (B,C,A) and make all conditions of B &amp; C required, any pages that do not specify the domain B or C will in fact trigger A.

The main difference between path breadcrumbs and context is that with path breadcrumbs you can drag and drop their weight order making things much easier. Here, you must find a way around that by altering your orders based on any of the methods i mention above. Not all will work in every case so i guess you just have to see which one works in your situation. I for example always have my path contexts above my content type contexts to ensure that the path if triggered has precedence over the content types and i use any conditions that are shared across multiple contexts by using method #2 i explain above.

I hope i made sense since i have not slept in over a day. At least it may be a good starting point :)