You are using one location, the static field t, to store two timer instances. The timer accessible via t is the last one assigned, "Varinder". Although the code is awful, it is possible to make it work as intended, like this :
public static void G_TIMER_ELAPSED(object sender, ElapsedEventArgs e, string s1)
{
Timer t = (Timer)sender;
Console.WriteLine("Timer elapsed for :{0} at {1} ", s1, DateTime.Now.ToString());
t.AutoReset = false;
t.Enabled = false;
t.Stop();
}
The sender parameter in the event handler contains the invoking instance and so simply casting the object gets the correct Timer.
Alan.