#include <bits/stdc++.h>
struct point {
  int x, y;
  bool operator==(point b) {
    if (x == b.x && y == b.y) return true;
    return false;
  }
};
struct line {
  point a;
  point b;
};
struct vector {
  int x, y;
};
void getv(vector &v, line &l) {
  v.x = l.a.x - l.b.x;
  v.y = l.a.y - l.b.y;
}
void get(point &a) { scanf("%d%d", &a.x, &a.y); }
bool kol(vector v1, vector v2) {
  long long a = v1.x * v2.y;
  long long b = v2.x * v1.y;
  if (a == b) return true;
  if (a == -b) return true;
  return false;
}
bool angl(vector v1, vector v2) {
  long long a = v1.x * v2.x;
  long long b = v1.y * v2.y;
  if (a + b == 0) return true;
  return false;
}
void get(line &a0) {
  get(a0.a);
  get(a0.b);
}
int main() {
  line l[4];
  point all[8];
  point p[8];
  int pn = 0;
  get(l[0]);
  get(l[1]);
  get(l[2]);
  get(l[3]);
  int use[8] = {0};
  for (int i = 0; i < 8; i++) {
    point a = (i % 2 == 0) ? l[i / 2].a : l[i / 2].b;
    bool flag = true;
    for (int j = 0; j < i; j++) {
      point b = (j % 2 == 0) ? l[j / 2].a : l[j / 2].b;
      if (a == b) {
        use[j]++;
        use[i]++;
        flag = false;
      }
    }
    if (flag) pn++;
  }
  if (pn != 4) {
    printf("NO");
    return 0;
  };
  ;
  for (int i = 0; i < 4; i++)
    if (use[i] != 1) {
      printf("NO");
      return 0;
    };
  ;
  vector vec[4];
  getv(vec[0], l[0]);
  getv(vec[1], l[1]);
  getv(vec[2], l[2]);
  getv(vec[3], l[3]);
  for (int i = 0; i < 4; i++) {
    int colin = 0;
    int ang = 0;
    for (int j = 0; j < 4; j++) {
      if (kol(vec[i], vec[j])) colin++;
      if (angl(vec[i], vec[j])) ang++;
    }
    if (ang != 2 || colin != 2) {
      printf("NO");
      return 0;
    };
    ;
  }
  {
    printf("YES");
    return 0;
  };
  ;
  ;
}
