Your solution is much more complex in terms of programming. You would have to make sure that category B the end date does not contain the same date as you start date. For category C you're loosing the data if you have the event repeating for more than two dates. There are many solutions to this example, here are my approaches:
I think it should cover all your cases.
CREATE TABLE Event (
2.) Flexible in terms of reusing the same event for different dates.