I am sorry, but st hasn't super powers, and it cannot do impossible things.
Control mask the upper bits of the key (key & 0x1F) while shift clears the
6th bit, so ctrl+shift+p = (p & ~0x20) & 0x1f. As you can see, it is
impossible to differentiate between ^p and ^P.