I'm just going to assume all your tolerances are functionally appropriate.
Remember you can make all the holes in a pattern a single datum. Your perpendicularity on Datum X is fine; if you changed it to location, it would mean exactly the same thing. But, rather than specifying X and Y datums separately you could do "2X 10 +/-0.1", attach a location tolerance of 0.2 relative to datum Z (this constrains perpendicularity to Z AND the holes' locations relative to one another), and refine that with your perpendicularity zero @ MMC. The two ø10 holes can then become datum X. The ø12mm holes I recommend something similar: do a single callout with "2X ø12 +/-0.2", attach a location of ø4 relative to Z and then X @MMB, and right below refine that callout with your zero @MMC perpendicularity. The only thing what I've just described changes in terms of actual tolerance is that now all holes will have the zero @MMC perpendicularity, but whoever is inspecting the part benefits because you have fewer datum reference frames and the intent is more clear to all who may read the drawing.
Just remember that zero @MMC perpendicularity does not really give you any (worthwhile) bonus tolerance which is the main benefit of using the MMC modifier - it only constrains the orientation based on size, while the location is RFS; say for instance that hole was made precisely at MMC, it would be a perfect cylindrical surface whose axis is perfectly perpendicular to Z BUT the axis could be located anywhere in a ø4mm zone centered at the basic dimension; this could definitely result in fit-up issues depending on what's mating to this part. Be careful there and make sure it fits with the intent of the design. You're on the right track but you definitely will want a copy of Y14.5 - it's a surprisingly effective learning tool all by itself.