/**********************************/
/* Autor: Antonio Bitounis	  */
/* MatrNr.: 0125834	          */
/* BspNr.:  3098		  */
/**********************************/

import java.util.*;
import java.lang.Math;
import eprog.*;

public class Projekt extends EprogIO

{ public static void main(String[] args) throws EprogException
	{
	boolean eingabeFehler=false;
	try {
		String beginn = readWord(); // Eingabe Datum
		short tage = readShort();   // Eingabe Arbeitstage
		int summe_tage = 0;
	
	/*** Eingabe des Datums wird auf Korrektheit überprüft ***/
							    
	    do {				
		if(beginn.length()==8)
			{
			if(pruefPunkte(beginn)==false) // pruefPunkte() wird weiter unten definiert
			
			   {
			   	eingabeFehler=true;
			   	break;
			   }
						  
			String tag = beginn.substring(0, 2);
			String monat = beginn.substring(3, 5);
			String jahr = beginn.substring(6);
			if(jahr.equals("93") || jahr.equals("94") || jahr.equals("95"))
			   { if(0<tage && tage < 31)
				{
					
				try 
					{	
					int tageszahl = Integer.parseInt(tag);	  // Umwandlung des String-Datums in "richtige" Zahlen
					int monatszahl = Integer.parseInt(monat);
					int jahreszahl = Integer.parseInt(jahr);
					
					if(monatszahl>12)
						{
						 eingabeFehler=true;
						 break;
						}
						
					switch(monatszahl)
					{ case 1: if(tageszahl>31) eingabeFehler=true; break;
					  case 2: if(tageszahl>28) eingabeFehler=true; break;
					  case 3: if(tageszahl>31) eingabeFehler=true; break;
					  case 4: if(tageszahl>30) eingabeFehler=true; break;
					  case 5: if(tageszahl>31) eingabeFehler=true; break;
					  case 6: if(tageszahl>30) eingabeFehler=true; break;
					  case 7: if(tageszahl>31) eingabeFehler=true; break;
					  case 8: if(tageszahl>31) eingabeFehler=true; break;
					  case 9: if(tageszahl>30) eingabeFehler=true; break;
					  case 10: if(tageszahl>31) eingabeFehler=true; break;
					  case 11: if(tageszahl>30) eingabeFehler=true; break;
					  case 12: if(tageszahl>31) eingabeFehler=true; break;
					}
					
					if(eingabeFehler==true) 
					break;	
															
					jahreszahl = 1900 + jahreszahl;		// Für den unten verwendeten GregorianCalendar wird das Jahr 
					monatszahl = monatszahl - 1;		// 93, 94 od. 95 auf 1993 etc. ausgebessert. Das Monat -1 weil
					summe_tage = tageszahl + tage - 1;	// Jänner = 0. Februar = 1,... !!
					
					/*** Berechnung des Ostersonntags -bzw. Ostermontags ***/
					
					double j = jahreszahl, h = Math.floor(j/100);
					double m = (15 + h - Math.floor(h/4) - Math.floor((h - Math.floor((h - 17)/25))/3)) % 30;
					double n = (4 + h - Math.floor(h/4)) % 7; 
					double a = j % 19, b = j % 4, c = j % 7; 
					double d = (19*a + m) % 30, e = (2*b + 4*c + 6*d + n) % 7; 
					
					int tag_ostermontag = (int)(d + e - 8);
					
					/*** Erstelle neuen Kalender zur Berechnung von Chr.Himmelfahrt u. Fronleichnam ***/
					
					GregorianCalendar rechne = new GregorianCalendar();
					rechne.set(Calendar.DATE, tag_ostermontag); 	// Kalender wird auf Ostermontag gestellt
					rechne.set(Calendar.MONTH, 3);
					rechne.set(Calendar.YEAR, jahreszahl);
										
					rechne.add(Calendar.DATE, + 38);		// Hier wird Chr.Himmelfahrt berechnet (O-Montag + 38 Tage)
					int c_h_tag = rechne.get(Calendar.DATE);
					int c_h_monat = rechne.get(Calendar.MONTH)+ 1;
					
					rechne.set(Calendar.DATE, tag_ostermontag);	// Kalender wird auf Ostermontag zurückgestellt
					rechne.set(Calendar.MONTH, 3);
					
					rechne.add(Calendar.DATE, + 59);		// Fronleichnam wird berechnet
					int f_l_tag = rechne.get(Calendar.DATE);
					int f_l_monat = rechne.get(Calendar.MONTH)+ 1;
										
					/*** Neuer Kalender wird erstellt ***/
																																						
					GregorianCalendar cal = new GregorianCalendar();
															
					for(int i=tageszahl; i<=summe_tage; i++)	// In dieser Schleife werden alle Tage des Projektes überfprüft
					{
					cal.set(Calendar.MONTH, monatszahl);
					cal.set(Calendar.YEAR, jahreszahl);
					
					cal.set(Calendar.DATE, i);
					  int cal_wochentag = cal.get(Calendar.DAY_OF_WEEK);
					  int cal_tag = cal.get(Calendar.DATE);
					  int cal_monat = (cal.get(Calendar.MONTH) + 1);
					  					  					  
					  /* Überprüfung ob Wochenende oder Werktag */
					  
					  if(cal_wochentag == cal.SATURDAY)
					  	summe_tage++;
					  
					  else if(cal_wochentag == cal.SUNDAY)
					  	summe_tage++;
					 					  	
					  /* Überprüfung der Feiertage */
					  
					  if(cal_wochentag != cal.SATURDAY && cal_wochentag != cal.SUNDAY)
					  {	
					  	if(cal_tag == 1 && cal_monat == 1)  			// Neujahr
					  	summe_tage++;
					  	if(cal_tag == 6 && cal_monat == 1)  			// Hl. 3 Könige
					  	summe_tage++;
					  	if(cal_tag == tag_ostermontag && cal_monat == 4)	// Ostermontag
					  	summe_tage++;
					  	if(cal_tag == 1 && cal_monat == 5)  			// Staatsfeiertag
					  	summe_tage++;					  	
					  	if(cal_tag == 15 && cal_monat == 8) 			// Mariä Himmelfahrt
					  	summe_tage++;
					 	if(cal_tag == 26 && cal_monat == 10)			// Nationalfeiertag
					  	summe_tage++;
					  	if(cal_tag == 1 && cal_monat == 11) 			// Allerheiligen	
					  	summe_tage++; 	
					  	if(cal_tag == 8 && cal_monat == 12) 			// Mariä Empfängnis
					  	summe_tage++;
					  	if(cal_tag == 25 && cal_monat == 12)			// Weihnachten
					  	summe_tage++;
					  	if(cal_tag == 26 && cal_monat == 12)			// 2.Weihnachtstag
					  	summe_tage++;
					  	if(cal_tag == c_h_tag && cal_monat == c_h_monat)	// Christi Himmelfahrt
					  	summe_tage++;
					  	if(cal_tag == f_l_tag && cal_monat == f_l_monat)	// Fronleichnam
					  	summe_tage++;
					  }								
					}
					
					/*** Ergebnisse werden ermittelt ***/
									
					int ergebnis_tag = cal.get(Calendar.DATE);
					int ergebnis_monat = cal.get(Calendar.MONTH) + 1;	// Monat wird wieder "zurückkorrigiert"
					int ergebnis_jahr = cal.get(Calendar.YEAR);
					ergebnis_jahr = ergebnis_jahr - 1900;			// Jahr wird wieder ohne 1900 angegeben
					
					/*** Überprüng ob die Zahlen geg.falls mit führender 
					Null ausgegeben werden müssen, oder nicht ***/
					
					if(ergebnis_tag < 10 || ergebnis_monat < 10) 
					{	
						if(ergebnis_tag < 10 && ergebnis_monat < 10) 
						println("0" + ergebnis_tag + ".0" + ergebnis_monat + "." + ergebnis_jahr);
	        				
        					else 
	        				{	if(ergebnis_tag < 10) 
        						println("0" + ergebnis_tag + "." + ergebnis_monat + "." + ergebnis_jahr);
        						
	        					else 
		        				println(ergebnis_tag + ".0" + ergebnis_monat + "." + ergebnis_jahr);
        						
        					}
			        	}
        				else 
        				println(ergebnis_tag + "." + ergebnis_monat + "." + ergebnis_jahr);
	        												
					System.exit(0);			// Programm erfolgreich abgeschlossen
									
					}
				catch(NumberFormatException e)  	// --> Abfangen: Fehler kann beim umwandeln von String 
									// in integer auftreten 
					{
					println("FALSCHE EINGABE");
					System.exit(0);
					}
				
				
				}
			     else {eingabeFehler=true; break;}
			   
			   }  
			else
				{eingabeFehler=true; break;}
			}
		else
		eingabeFehler=true;
	       }
	   while(eingabeFehler!=true);
	   
	   if(eingabeFehler=true)
	   	{ 
	   	println("FALSCHE EINGABE");
	   	System.exit(0);
	   	}
	   
	   }
	
	catch(EprogException e)
	      { 
	      println("?"); 
	      System.exit(0); 
	      }
	}
		
	private static boolean pruefPunkte(String beginn)		// gehört zur Überprüfung der Eingabe am Anfang
	{ if(beginn.charAt(2)=='.' && beginn.charAt(5)=='.')
		return true;
	  else return false;
	}
}