Twist words to intersect
Given three strings of alphabetic characters \$A\$, \$B\$, and \$X\$, (all uppercase or all lowercase, your choice), output an arrangement of \$A\$ and \$B\$ on a grid such that they intersect only at the letters of \$X\$. Each word can start at any location in the grid; after that, every character in the word must be placed in the grid at a location orthogonal (directly above, below, to the left, or to the right) of the previous character. The word must not intersect itself. The grid can be arbitrarily large.
For example, if \$A\$ was ASHAMEFULACT
, \$B\$ was CHARACTER
, and \$X\$ was HAT
, one possible arrangement is shown below.
In text format:
_ _ _ _ _ _ _
_ _ a m e f _
_ c H a r u _
_ a s c A l _
_ _ e T c _ _
_ _ r _ _ _ _
_ _ _ _ _ _ _
(The places where the words intersect are shown in capitals; the rest of the letters are shown in lowercase.)
You can output in any reasonable format -- the format above is not required. For example, you do not need to have the intersecting letters be a different case than the rest of the letters in the words. One possible output format would be a 2D array of characters, like
[ ["", "A", "M", "E", "F"],
["C", "H", "A", "R", "U"],
["A", "S", "C", "A", "L"],
["", "E", "T", "C", "" ],
["", "R", "", "", "" ] ]
You can assume that such an arrangement is possible to create -- e.g. \$A\$ and \$B\$ will both have the letters of \$A\$ as a subsequence (in order).
Standard loopholes are forbidden. As this is code-golf, shortest program wins.