Minimum and maximum of a list of associations.

I am trying to find the minimum values ​​for all the elements in a list of associations, here is an example

x = {<|"a"-> 4, "b" -> 9, "c" -> 15 |>, <|"a"->21, "b" -> 11, "c" -> 1 |>, <|"a"->12, "b" -> 3, "c" -> 21 |>}

Output required for Min
{<|"a"-> 2, "b" -> 3, "c" -> 1 |>}

Output required for Max
{<|"a"-> 21, "b" -> 11, "c" -> 15 |>}

My attempt
for Max: Maximal by[Values]@X
Result: {<|"a" -> 21, "b" -> 11, "c" -> 1 |>}

For min: MinimalBy[Values]@X
Result: {<|"a" -> 4, "b" -> 9, "c" -> 15 |>}

Is there an elegant way to achieve this result?