#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:102400000,102400000")
using namespace std;
int leap(int y) { return y % 4 == 0 ? 1 : 0; }
int check(int d1, int m1, int y1, int d2, int m2, int y2) {
  int flag;
  if (m2 > 12 || d2 > 31) return 0;
  if (m2 == 2 && leap(y2) == 0 && d2 > 28) return 0;
  if (m2 == 2 && leap(y2) && d2 > 29) return 0;
  if (y1 - y2 >= 18) {
    if (y1 - y2 > 18) {
      flag = 1;
    } else if (y1 - y2 == 18) {
      if (m1 >= m2) {
        if (m1 > m2) {
          flag = 1;
        } else if (m1 == m2) {
          if (m2 == 2 && leap(y2)) {
            if (d1 - d2 >= -1) {
              flag = 1;
            } else {
              flag = 0;
            }
          } else {
            if (d1 >= d2) {
              flag = 1;
            } else {
              flag = 0;
            }
          }
        }
      }
    }
  } else {
    flag = 0;
  }
  return flag;
}
int main() {
  int d1, d2, m1, m2, y1, y2;
  while (~scanf("%d.%d.%d%d.%d.%d", &d1, &m1, &y1, &d2, &m2, &y2)) {
    int flag = 0;
    flag = check(d1, m1, y1, d2, m2, y2);
    if (!flag) flag = check(d1, m1, y1, d2, y2, m2);
    if (!flag) flag = check(d1, m1, y1, m2, d2, y2);
    if (!flag) flag = check(d1, m1, y1, m2, y2, d2);
    if (!flag) flag = check(d1, m1, y1, y2, d2, m2);
    if (!flag) flag = check(d1, m1, y1, y2, m2, d2);
    if (flag)
      printf("YES\n");
    else
      printf("NO\n");
  }
}
