N.W.
There's good control and bad control with children. You ALWAYS need some kind of control, letting a kid just do what they want is never good. But neither is being overbearing and not letting them assert their independence.
Three is a hard age because two-year olds are still babies in many way. But three year olds want to be independent much more so, and we know they have the capability to be.
Sometimes the more you react (even negatively) the MORE a child will do something. They are trying to create an effect. So if you tell Junior "no, you can't play musical instruments but you can play cars" and he throws a fit, the more you try to pacify him with "Not cars? How about trains? How about this? Junior, we don't hit. We don't throw things when we are angry" the more he is creating an effect on you, instead of the other way around. And all the yelling and punishment adds to the effect he has created. When he goes down in anger and frustration and you go down in anger and frustration...guess who "won?"
I have found that allowing the child to have "no effect" works better. When a child says "No, I want trains" I might say "no trains, how about cars?" If he gets upset I would repeat "no trains, how about cars?" If he got mad and stomped his feet I'd repeat in the same tone "no trains, how about cars?" If he got angry, I'd let him be angry, maybe leave the room (of course making sure that there wasn't anything around he could hurt himself with). Children WILL STOP behavior that has no effect. It's more effective than punishment and works on ALL AGES. (Sadly, babies in China don't cry anymore once they realize no one will come if they do.)
Three can be so much fun! By putting him in environment where he is safe and can be a little free helps too. I hope what I said helps a little, you might have to tailor it to your child and your home. Good Luck!