Cheryl has told A and B that her birthday is one of these ten dates:

*May 15, 16, 19*

*June 17, 18*

*July 14, 16*

*August 14, 15, 17*

She has told A the month and B the number of the day, and they both know this.

*A says, 'I do not know C's birthday.*

This tells us nothing, because whatever month he had been told A would not be able yet to deduce the birthday.

But B

__would__know C's birthday if he had been told that the day was, say, 19: because 19 occurs in the list of options only in May. Likewise B would know the birthday if had been told that the day was 18: because this occurs only in June.
So, then A says:

*'... but I know for sure that B does not know either.'*

A would not be able to say this, if the month he had been told was May or June, because for each of these two months there is the possibility that B actually knows the birthday already.

From this B (and we) can deduce that the month of C's birthday is neither May nor June.

B replies:

*'At first I did not know C's birthday, but I do now.'*

This means that the number of the day (which B knows) must occur in either July or August but NOT in both these months. For example, if B knew the day was 17 then he would know it had to be August 17. Likewise, B would know the birthday if the day was 16 (July) or 15 (July).

A has deduced all this as well! He knows that the day is 15, 16 or 17. But A also knows the month. And he then replies:

*'Now I know as well!*

Now A could only know the birthday if the month (which he knows) has only one of these three options in the list: 15, 16 or 17. That month is July.

This is how we (and B presumably now) know that Cheryl's birthday must be 16 July.