You mentioned that this is not his usual behaviour, and you also said that you have a 12 week old? I wonder if he is playing up bc of the new baby? Having a new sibling arrive can be very hard for the first as his world as he knew has now changed, and he may be finding it hard to deal with. All these new emotions must be very confusing to him, (the jealousy, the sharing you with a new baby, etc). I say all this as I too have a 3yr old who suddenly starting playing up in a big way once DD was born. She is now 4 months and DS has begun to settle a little.
I tend to threaten DS's bad behaviour with removing one of his toys and then returning it once he has calmed down and behaved. I then shower him with lots of praise for being such a good little boy. I also praise him randomly during the day.
The fact though that your DS may hurt himself and is not listening to you is a bit harder to deal with on the spot which is why I thought to maybe encourage his listening throughout the day also and maybe trying to understand why he is rebelling against you to begin with. Maybe try threating him with removing a toy when you get back home if he does not listen to you and then explain to him why the toy was removed and when he can have it back.