#include <bits/stdc++.h>
using namespace std;
const int mm = 10;
int co[2][12] = {{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
                 {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
int main() {
  char s1[mm], s2[mm];
  int A, B, n, x[3], D, M, Y;
  while (cin >> s1) {
    D = (s1[0] - '0') * 10 + s1[1] - '0';
    M = (s1[3] - '0') * 10 + s1[4] - '0';
    Y = (s1[6] - '0') * 10 + s1[7] - '0';
    cin >> s1;
    x[0] = (s1[0] - '0') * 10 + s1[1] - '0';
    x[1] = (s1[3] - '0') * 10 + s1[4] - '0';
    x[2] = (s1[6] - '0') * 10 + s1[7] - '0';
    int flag1 = 0, fuck;
    for (int i = 0; i < 3; i++)
      if (x[(0 + i) % 3] <= Y - 18 && x[(0 + i) % 3] >= 1) {
        if (x[(0 + i) % 3] % 4 == 0)
          fuck = 1;
        else
          fuck = 0;
        if (x[(0 + i) % 3] == Y - 18) {
          if (x[(2 + i) % 3] <= M && x[(2 + i) % 3] <= 12) {
            if (x[(2 + i) % 3] == M && x[(1 + i) % 3] <= D &&
                x[(1 + i) % 3] <= co[fuck][x[(2 + i) % 3] - 1]) {
              flag1 = 1;
              break;
            } else if (x[(2 + i) % 3] < M &&
                       x[(1 + i) % 3] <= co[fuck][x[(2 + i) % 3] - 1]) {
              flag1 = 1;
              break;
            }
          }
        } else {
          if (x[(2 + i) % 3] <= 12 &&
              x[(1 + i) % 3] <= co[fuck][x[(2 + i) % 3] - 1]) {
            flag1 = 1;
            break;
          }
        }
        swap(x[(2 + i) % 3], x[(1 + i) % 3]);
        if (x[(0 + i) % 3] == Y - 18) {
          if (x[(2 + i) % 3] <= M && x[(2 + i) % 3] <= 12) {
            if (x[(2 + i) % 3] == M && x[(1 + i) % 3] <= D &&
                x[(1 + i) % 3] <= co[fuck][x[(2 + i) % 3] - 1]) {
              flag1 = 1;
              break;
            } else if (x[(2 + i) % 3] < M &&
                       x[(1 + i) % 3] <= co[fuck][x[(2 + i) % 3] - 1]) {
              flag1 = 1;
              break;
            }
          }
        } else {
          if (x[(2 + i) % 3] <= 12 &&
              x[(1 + i) % 3] <= co[fuck][x[(2 + i) % 3] - 1]) {
            flag1 = 1;
            break;
          }
        }
        swap(x[(2 + i) % 3], x[(1 + i) % 3]);
      }
    if (flag1)
      cout << "YES" << endl;
    else
      cout << "NO" << endl;
  }
  return 0;
}
