Remap array columns to single column with value
UNION ALL, not UNION:
SELECT id, unnest(critical) AS element, 1 AS prio FROM tbl
UNION ALL SELECT id, unnest(high)     , 2         FROM tbl
UNION ALL SELECT id, unnest(low)      , 3         FROM tbl;

Optionally drop the id (like in your displayed result), but I suspect you need it.
For big tables, a LATERAL subquery may be faster as it only uses a single sequential scan:
SELECT sub.*
FROM   tbl t
CROSS  JOIN LATERAL (
      SELECT id, unnest(t.critical) AS element, 1 AS prio
   UNION ALL SELECT id, unnest(t.high)        , 2
   UNION ALL SELECT id, unnest(t.low)         , 3
   ) sub;

db&lt;&gt;fiddle here
Otherwise, this question seems like a subset of your later more complex question:

Unnest ids from arrays based on priority with no duplication