Since not every VM/CT will use the CPU all the time, you can "oversubscribe" by quite a bit. Keep an eye on the status monitors to see if you are reaching 100% cpu utilization across all machines. If so, then, you'll have slowdown.
As for RAM, VMs can be set to dynamically increase/decrease RAM usage, VMs can also use KSM to share memory, and there's also swap, like wolfgang mentioned.
So, try it out, and see where you start getting too loaded. Eventually, if you keep adding, you'll have a disk IO, RAM size, or CPU bottleneck, and then you can either scale back (fewer VMs), scale up (more/faster), or scale out (add a physical system to the cluster).