Yes, string literals use dynamic memory. You can put them in flash by wrapping them in the F() macro. For example, change:
lcd.print(" This Program Is ");
to:
lcd.print(F(" This Program Is "));
Your strings are also very wasteful of memory, whether flash or SRAM. For example instead of:
lcd.setCursor(0, 0);
lcd.print(" This Program Is ");
you could have done this:
lcd.setCursor(2, 0);
lcd.print("This Program Is");
to save 5 bytes.
And this:
void Clear_The_Screen()
{
lcd.setCursor(0, 0);//--------------------------//
lcd.print(" ");//------------//
lcd.setCursor(0, 1);//--------------------------//
lcd.print(" ");//------------//
lcd.setCursor(0, 2);//--------------------------//
lcd.print(" ");//------------//
lcd.setCursor(0, 3);//--------------------------//
lcd.print(" ");//------------//
}
Just use lcd.clear().
And as a side not, all these a, b, c variables are a really bad idea. Always use descriptive variable names. You shouldn't have to go look at a comment to see that a is "used to tell if alarm is on or off". Just call it something like alarmIsOn. I'm guessing that variable will never need to store more than a few values, probably just true or false so you could use a smaller data type such as bool or byte to save one byte of dynamic memory.