import java.util.*;
import java.text.DateFormat;
import java.io.*;

public class bus {
  static int year;
  static int[][] dowmem = new int[13][32];
  static boolean[][] amem = new boolean[13][32];

  public static void main(String[] args) throws IOException {
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    String line;
    while ((line = in.readLine()) != null) {
      String[] tmp;
      
      tmp = line.split(" ");
      String types = tmp[0];
      String[] ranges = tmp[1].split(",");
      year = Integer.parseInt(tmp[2]);
      
      // precount DOWs
      Date date = new Date(year-1900, 0, 1);
      String s = DF.format(date);
      for (int i = 1; i <= 7; ++i) {
	if (s.startsWith(DOWS[i])) dowmem[1][1] = i;
      }

      int prev = dowmem[1][1];
      for (int m = 1; m <= 12; ++m) {
	for (int d = 1; d <= dvm(m, year); ++d) {
	  if (d == 1 && m == 1) continue;
	  ++prev;
	  if (prev == 8) prev = 1;
	  dowmem[m][d] = prev;
	}
      }
      // end precount DOWs
      
      
      boolean[][] days = new boolean[13][32];
      
      for (String r : ranges) {
	parseRange(r, days);
      }
      
      // easter
      int golden, solar, lunar, p;
      golden = (year%19) + 1;
      solar = (year-1600)/100 - (year-1600)/400;
      lunar = (((year-1400)/100)*8)/25;
      p = (3003 - (11*golden) + solar - lunar) % 30;
      if (p == 29 || (p == 28 && golden>11)) --p;
      
      int easterM = 3, easterD = 21;
      ++p;
      while (p-- > 0) {
	++easterD;
	if (easterD == 32) {
	  easterD = 1;
	  easterM = 4;
	}
      }
      
      while (dow(easterD, easterM, year) != 1) {
	++easterD;
	if (easterD > dvm(easterM, year)) {
	  ++easterM;
	  easterD = 1;
	}
      }
      // end easter
      
      holD[0] = easterD;
      holM[0] = easterM;
      //System.out.println(easterD + " " + easterM);
      
      // precount As
      amem[1][1] = false;
      boolean prevHol = true;
      for (int m = 1; m <= 12; ++m) {
	for (int d = 1; d <= dvm(m, year); ++d) {
	  if (d == 1 && m == 1) continue;
	  amem[m][d] = (workday(d,m,year) && prevHol);
	  //if (amem[m][d] && dowmem[m][d] != 1) System.out.println(d+"."+m);
	  prevHol = isHol(d,m);
	}
      }
      // end precount As
      
      
      // a's
      for (int i = 0; i < holD.length; ++i) {
	int ad = holD[i];
	int am = holM[i];
	while (!workday(ad,am,year)) {
	  ++ad;
	  if (ad > dvm(am,year)) {
	    ++am;
	    ad = 1;
	  }
	}
	aD[i] = ad;
	aM[i] = am;
      }
      // end a's
      
      for (int m = 1; m <= 12; ++m) {
	for (int d = 1; d <= 31; ++d) {
	  if (days[m][d] && !matches(d, m, year, types)) days[m][d] = false;
	}
      }
      
      int res = 0;
      for (int m = 1; m <= 12; ++m) {
	for (int d = 1; d <= dvm(m, year); ++d) {
	  if (days[m][d]) {
	    //System.out.println(d+"."+m);
	    ++res;
	  }
	}
      }
      System.out.println(res);
    }
  }
  
  
  static void parseRange(String r, boolean[][] days) {
    if (r.indexOf('-') != -1) {
      String[] dates = r.split("-");
      String[] tmp = dates[0].split("\\.");
      int d1 = Integer.parseInt(tmp[0]);
      int m1 = Integer.parseInt(tmp[1]);
      tmp = dates[1].split("\\.");
      int d2 = Integer.parseInt(tmp[0]);
      int m2 = Integer.parseInt(tmp[1]);
      
      int m = m1, d = d1;
      while (m <= m2 || (m == m2 && d <= d2)) {
	days[m][d] = true;
	++d;
	if (d == 32) {
	  ++m;
	  d = 1;
	}
      }
    } else {
      String[] tmp = r.split("\\.");
      int d = Integer.parseInt(tmp[0]);
      int m = Integer.parseInt(tmp[1]);
      days[m][d] = true;
    }
  }
  

  static int[] holD = {0, 1, 1, 8, 5, 6, 28, 28, 17, 24, 25, 26};
  static int[] holM = {0, 1, 5, 5, 7, 7,  9, 10, 11, 12, 12, 12};
  static int[] aD =   new int[12];
  static int[] aM =   new int[12];
  
  static boolean isHol(int d, int m) {
    if (dow(d,m,year) == 7) return true;
    for (int i = 0; i < holD.length; ++i) {
      if (d == holD[i] && m == holM[i]) return true;
    }
    return false;
  }
  
  static boolean isA(int d, int m) {
    return amem[m][d];
 /*   if (isHol(d,m) || dow(d,m,year)=='6') return false;
  
    for (int i = 0; i < holD.length; ++i) {
      if (d == aD[i] && m == aM[i]) return true;
    }
    
    // after sunday
    int cd = d, cm = m, cy = year;
    --cd;
    if (cd == 0) {
      --cm;
      if (cm == 0) {
	--cy;
	cm = 12;
      }
      cd = dvm(cm,cy);
    }
    if (workday(cd,cm,cy) || (!isHol(cd,cm) && dow(cd,cm,cy) == 6)) return false;
    
    return true; */
  }
  
  static boolean workday(int d, int m, int y) {
      int curdow = dow(d,m,y);
      return (curdow != 6 && curdow != 7 && !isHol(d,m));
  }

  static boolean matches(int d, int m, int y, String types) {
    for (int i = 0; i < types.length(); ++i) {
      char type = types.charAt(i);
      int curdow = dow(d,m,y);
      if (type >= '1' && type <= '7' && curdow == (type-'0')) {return true;}
      if (type == 't' && isHol(d, m)) return true;
      if (type == 'w' && curdow != 6 && curdow != 7 && !isHol(d,m)) return true;
      if (type == 'a' && isA(d,m)) {return true;}
    }
    return false;
  }
  
  
  static final String[] DOWS = {"asdf", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"};
  static final DateFormat DF = DateFormat.getDateInstance(DateFormat.FULL, Locale.US);
  
  static int dow(int d, int m, int y) {
    if (y == year) return dowmem[m][d];
    
    Date date = new Date(y-1900, m-1, d);
    String s = DF.format(date);
    for (int i = 1; i <= 7; ++i) {
      if (s.startsWith(DOWS[i])) return i;
    }
    return 7;
  }
  
  
  static boolean leap(int y) {
    if (y % 400 == 0) return true;
    if (y % 100 == 0) return false;
    return (y % 4 == 0);
  }
  
  
  static final int[] DVMS = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  
  static int dvm(int m, int y) {
    if (leap(y) && m == 2) return 29;
    return DVMS[m];
  }
  
}