I wasn't certain how to title this request/problem, but here goes:

I'm A, and I want to send a message that is received by B, C, D.

Each receiving entity here is part of some set of domains D1, D2, D3:

B: {D1, D2}
C: {D2}
D: {D3}


How do I encrypt a message with a single key that I, A send to B, C, D such that it can only be decrypted by receivers in a given domain subset (e.g Msg(D1,D3) = B and D can decrypt the message)?

Assume it is possible to convey to A, B, C and D some security material ahead of time before having to send the message.