Ohhh do i have a heartbreaking problem

I have two cats in my home, which i love to death because they are the cutest, smartest and most unique cats ever. I got a Yorkie puppy a month ago and he is now almost 12 weeks. My yorkie, Enzo, is absolutely horrible towards my kitties. One of my cats, Spike, never comes near the puppy, just watches him from a close distance. The other cat, Bimmer, it seems like he's almost asking for it. Whenever Bimmer is at Enzo's (puppy) level, the dog just go crazy. Jumping on the cat, nipping at his ears and his eyes, and at his tail. The cat will sit there and take the torture for 10, 15, minutes. Eventually he gets mad and puts the puppy in a head lock and bites at his neck. The puppy of course screams really loud and then after a second starts jumping around the cat once again. This goes on all day long. When me or my husband are home we yell out NO and tap him on his butt, but he just goes back to jumping around Bimmer, my kitty. I can only imagine what goes on when we're not home. My heart just breaks when i see what my cat is going through, he's so patient, but i can just see it in his eyes that he's angry and annoyed. I love all my animals so much and want everyone to get along. I know it's in the dog nature to be an attacker and hunter, and of course yorkies are very jumpy and always excited dog. Does anyone have a yorkie and cats that can give me some advice? How can i get my puppy to calm down around my cats so they can all get along? I want them to play together, that's fine!!! I just don't want my cats to go through hell with the dog in the house. HELP please