Not Enough Memory;

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.