There are loads of exceptions declared by the .NET framework - and other code (including your own) can create more. There are certainly more than 39.... look at the documentation for System.Exception and you'll see near the bottom a list of all the direct known subclasses just in the .NET framework.
Basically, it's not useful to know "all the exceptions" - what's important is which exceptions can be thrown by code you are executing, and in particular which exceptions you should really try to handle (rather than those which should either kill the process or just make the request fail in a server environment).