#include <bits/stdc++.h>
using namespace std;
int find(int d1, int m1, int y, int d2, int m2, int y2) {
  int k = 0;
  if (y - y2 > 18)
    k = 1;
  else if (y - y2 == 18) {
    if ((m1 - m2) > 0)
      k = 1;
    else if (m1 - m2 == 0) {
      if (d1 - d2 >= 0) k = 1;
    }
  }
  return k;
}
int main() {
  int d1, m1, y, d2, y2, m2;
  int a[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  while (~scanf("%d.%d.%d", &d1, &m1, &y)) {
    scanf("%d.%d.%d", &d2, &m2, &y2);
    int k1 = 0, k2 = 0, k3 = 0, k4 = 0, k5 = 0, k6 = 0;
    k1 = find(d1, m1, y, d2, m2, y2);
    if (y2 <= 12) {
      if (m2 % 4 == 0) a[2] = 29;
      if (a[y2] >= d2) k2 = find(d1, m1, y, d2, y2, m2);
      a[2] = 28;
    }
    if (d2 % 4 == 0) a[2] = 29;
    if (y2 <= a[m2]) {
      k3 = find(d1, m1, y, y2, m2, d2);
    }
    a[2] = 28;
    if (d2 <= 12) {
      k4 = find(d1, m1, y, m2, d2, y2);
    }
    if (d2 <= 12) {
      if (m2 % 4 == 0) a[2] = 29;
      if (a[d2] >= y2) k5 = find(d1, m1, y, y2, d2, m2);
      a[2] = 28;
    }
    if (y2 <= 12) k6 = find(d1, m1, y, m2, y2, d2);
    if (k1 || k2 || k3 || k4 || k5 || k6)
      printf("YES\n");
    else
      printf("NO\n");
  }
  return 0;
}
