As i said before, you cant NAME the timers (a,b,c in your case) and expect it to work for two joining nicks that overlap each others times, the timers are named so as the second nick enters your essentially assigning new info to timers named a,b & c so the original a,b, & c timers are destroyed. This is the reason I took the names off so they simply get assigned the next free timer number, thus it doesnt care if 10 people joined with anon nicks.

However on top of this you dont understand how timers function for a start, you can not block code into a timer using { and }, the opening one well pretty much be ignored and the end of line or a | (command seperator) well be seen as the end of the timer, ie
if you ran this timer >> //timerEXAMPLE 1 1 { echo one | echo two } the results would be as follows.
two
one

the cause is simple there are two commands there //timeEXAMPLE1 1 echo one and echo two first the timer is started, then the echo two occurs then the timer goes off and echos one. aka two, one.

here is the relevent code snipit for a On join event, replacing the $nick with $1 well allow it to be used in a popup
Code:
if (Anon* iswm $nick) {
  .notice $1 Please change your nick within 2 minutes, or you will be kicked.
  .timer 1 30 if ( $nick ison $chan ) notice $nick This is your second warning change your nick or be kicked 1 minute remaining!!
  .timer 1 90 if ( $nick ison $chan ) notice $nick This is your LAST warning change your nick or be kicked 30 seconds remaining!!
  .timer 1 120 if ( $nick ison $chan ) kick $chan $nick Please change your nick
}


Simply put 3 timers are started, in each one when it goes off the nick well be checked for being in the channel, if he is the messge or action is performed, if not then nothing occurs.

* I feel it important at this point to explain something about the behavour of timers and $identifiers to you, when the timer is created $identifiers that are sepearted by a leading space well be evaluated to there contents, while $identifiers with leading characters well not be. I use none of these above but below i show the effect of leading characters also trailing ones
Secondly when the timer goes off the line is then also evaluated and any $identifiers then located are treated just as any other line of code.

here are 4 examples and folloing them the line of code that is generated for the timer, assume these are in a on join event, and DaveC is the nick joining setting the timer off, the channel name is #examples

//timer 1 10 if ( $nick ison $chan ) echo $chan $nick is still in channel he joined at $time - The time is now $!time
timer code is... if ( DaveC ison #examples ) echo #examples DaveC is still in channel he joined at 12:00:01 - The time is now $!time

//timer 1 10 if ($nick ison $chan ) echo $chan $nick is still in channel he joined at $time - The time is now $!time
timer code is... if ($nick ison #examples ) echo #examples DaveC is still in channel he joined at 12:00:01 - The time is now $!time

//timer 1 10 if ( $nick ison $chan) echo $chan $nick is still in channel he joined at $time - The time is now $!time
timer code is... if ( DaveC ison echo #examples DaveC is still in channel he joined at 12:00:01 - The time is now $!time

//timer 1 10 if ($nick ison $chan) echo $chan $nick is still in channel he joined at $time - The time is now $!time
timer code is... if ($nick ison echo #examples DaveC is still in channel he joined at 12:00:01 - The time is now $!time

Example 1 is the correct method, as when the timer goes off $nick well have no value or it has your nick in it, i think $chan well have no value (cant remember for sure), but as all $idetifiers have been spaced out they have been evaluated

Example2, becuase the 1st $nick has a ( on it, it doesnt get evaluated, so the line well compare your nick to being on the channel not mine

Example3, becuase $chan) has no value as an $identifier becuase mirc does not see this as $chan with a ) following it, so it have been evaluated to $null and isnt there, this well cause the line to error with invalid IF

Example4, this is just a combination of ex2 and ex3

** please note the $!time at the end, this is a special function of mirc to delay evaluation, essetially if mirc see any $!identifier it evaluates it to being the same thing minus 1 !
example
//echo $!!time $!time $time
$!time $time 12:00:01

this cane be used to delay evaluation of an identifier to inside the timer, rather than at its creation.