import java.util.*;
import java.io.*;
import java.math.*;

public class Practice 

{ 
	 static FastReader sc=new FastReader(); 
	 
		  public static void main(String[] args) 
    {
			  //StringBuffer sb=new StringBuffer("");
			    int ttt =1;
			    	//ttt=i(); 
		        outer :while (ttt-- > 0) 
				{
		        	//int n=i();
		        	ArrayList<Integer> A[]=new ArrayList[8];
		        	for(int i=0;i<8;i++) {
		        		A[i]=new ArrayList<>();
		        	}
		        	int cc=0;
		        	boolean flag=false;
		        	for(int i=0;i<4;i++) {
		        		int a=i();
		        		int b=i();
		        		int c=i();
		        		int d=i();
		        		A[cc].add(a);
		        		A[cc].add(b);
		        		cc++;
		        		A[cc].add(c);
		        		A[cc].add(d);
		        		cc++;
		        		if(a!=c && b!=d)
		        			flag=true;
		        	}
		        	if(flag) {
		        		System.out.println("NO");
		        		continue outer;
		        	}
		        	for(int i=0;i<8;i++) {
		        		int a=A[i].get(0);
        				int b=A[i].get(1);
		        		for(int j=i+1;j<8;j++) {
		        			int c=A[j].get(0);
	        				int d=A[j].get(1);
	        				if(a==c && b==d)
	        					continue;
		        			for(int k=j+1;k<8;k++) {
		        				
		        				
		        				int e=A[k].get(0);
		        				int f=A[k].get(1);
		        				if(a==e && b==f || c==e&& d==f)
		        					continue;
		        				if(coll(a,b,c,d,e,f)==0) {
		        					System.out.println("NO");
		        					continue outer;
		        				}
		        			}
		        		}
		        	}
		        	for(int i=0;i<8;i++) {
		        		int co=0;
		        		for(int j=0;j<8;j++) {
		        			if(i==j)
		        				continue;
		        			if(A[i].get(0)==A[j].get(0) && A[i].get(1)==A[j].get(1))
		        				co++;
		        		}
		        		if(co>1)
		        		{
		        			System.out.println("NO");
		        			continue outer;
		        		}
		        	}
		        	int v[]=new int[8];
		        	for(int i=0;i<8;i++) {
		        		if(v[i]==1)
		        			continue;
		        		for(int j=0;j<8;j++) {
		        			if(i==j)
		        				continue;
		        			if(A[i].get(0)==A[j].get(0) && A[i].get(1)==A[j].get(1)) {
		        				v[i]=1;
		        				v[j]=1;
		        				
		        			}
		        			
		        		}
		        	}
		        	for(int i : v) {
		        		if(i==0) {
		        			System.out.println("NO");
		        			continue outer;
		        		}
		        		
		        	}
		        	System.out.println("YES");
		        	
		        	
		        	
		        	
		        	
				}
		        //System.out.println(sb.toString());
    }

		  static int coll(int x1, int y1, int x2,  
                  int y2, int x3, int y3) 
{ 

int a = x1 * (y2 - y3) +  
        x2 * (y3 - y1) +  
        x3 * (y1 - y2); 
return a;
}  
		  static int vac(int A[],int i,int n,int l) {
			  
			  if(i==A.length)
				  return 0;
			  //System.out.println(A[i]);
			  if(A[i]==0)
				  return 1+vac(A,i+1,n,0);
			  
			  int op2=0;
			 // int op2=Integer.MAX_VALUE,op3=Integer.MAX_VALUE,op4=Integer.MAX_VALUE;
			  if(A[i]==1) {
				  int c=0;
				  int j=i+1;
				  for(;j<n;j++) {
					  if(A[j]!=1)
						  break;
					  else
						  c++;
				  }
				   op2=c+vac(A,j,n,0);
				  return op2;
			  }
			  else if(A[i]==2) {
				  int j=i+1;
				  int c=0;
				  for(;j<n;j++) {
					  if(A[j]!=2)
						  break;
					  else
						  c++;
				  }
				   op2=c+vac(A,j,n,0);
				  //return Math.min(op1, op3);
			  }
			  else {
			  if(l==0) {
				  int j=i+1;
				  int c=0;
				  if(i-1>0) {
					  if(A[i-1]==2) {
						  
						  for(int k=i+1;k<n;k++) {
							  if(A[k]!=1) {
								  j=k;
								  break;
							  }
							  else
								  c++;
						  }
					  }
					  if(A[i-1]==1) {
						  for(int k=i+1;k<n;k++) {
							  if(A[k]!=1) {
								  j=k;
								  break;
							  }
							  else
								  c++;
						  }

						  //System.out.println(c);
					  }
				  }
				  op2=c+vac(A,j,n,0);
				 //return Math.min(op1, op4);
			  }
			  else {
			  int j=i+1;
			  int c=0;
			  for(;j<n;j++) {
				  if(A[j]!=2)
					  break;
				  else
					  c++;
			  }
			   op2=c+vac(A,j,n,0);
			  //return Math.min(op1, op3);
			  }
			  }
			  int op1=1+vac(A,i+1,n,1);
			  return Math.min(op1, op2);
			  
			  
			 // return Math.min(op1, Math.min(op2, Math.min(op3, op4)));
			  
			 
			  
			  
		  }
		  
		  
static int[] input(int n) {
	int A[]=new int[n];
	   for(int i=0;i<n;i++) {
		   A[i]=sc.nextInt();
	   }
	   return A;
   }
static long[] inputL(int n) {
	long A[]=new long[n];
	   for(int i=0;i<n;i++) {
		   A[i]=sc.nextLong();
	   }
	   return A;
   }
static String[] inputS(int n) {
	String A[]=new String[n];
	   for(int i=0;i<n;i++) {
		   A[i]=sc.next();
	   }
	   return A;
   }


static void input(int A[],int B[]) {
	   for(int i=0;i<A.length;i++) {
		   A[i]=sc.nextInt();
		   B[i]=sc.nextInt();
	   }
}
static int max(int A[]) {
	int max=Integer.MIN_VALUE;
	for(int i=0;i<A.length;i++) {
		max=Math.max(max, A[i]);
	}
	return max;
}
static int min(int A[]) {
	int min=Integer.MAX_VALUE;
	for(int i=0;i<A.length;i++) {
		min=Math.min(min, A[i]);
	}
	return min;
}
static long max(long A[]) {
	long max=Long.MIN_VALUE;
	for(int i=0;i<A.length;i++) {
		max=Math.max(max, A[i]);
	}
	return max;
}
static long min(long A[]) {
	long min=Long.MAX_VALUE;
	for(int i=0;i<A.length;i++) {
		min=Math.min(min, A[i]);
	}
	return min;
}
static long mod(long x) {
	 int mod=1000000007;
	  return ((x%mod + mod)%mod);
}

     static int i() {
    	 return sc.nextInt();
     }
     static String s() {
    	 return sc.next();
     }
     static long l() {
    	 return sc.nextLong();
     }  
     static void sort(int[] A){
        int n = A.length;
        Random rnd = new Random();
        for(int i=0; i<n; ++i){
            int tmp = A[i];
            int randomPos = i + rnd.nextInt(n-i);
            A[i] = A[randomPos];
            A[randomPos] = tmp;
        }
        Arrays.sort(A);
     }
     static boolean prime(int n) 
	    { 
	        if (n <= 1) 
	            return false; 
	        if (n <= 3) 
	            return true; 
	        if (n % 2 == 0 || n % 3 == 0) 
	            return false; 
	        double sq=Math.sqrt(n);
	  
	        for (int i = 5; i <= sq; i = i + 6) 
	            if (n % i == 0 || n % (i + 2) == 0) 
	                return false; 
	        return true; 
	    } 
     static int gcd(int a, int b) 
     { 
         if (a == 0) 
             return b; 
         return gcd(b % a, a); 
     } 
  
        
        
    static class FastReader 
    { 
        BufferedReader br; 
        StringTokenizer st; 
  
        public FastReader() 
        { 
            br = new BufferedReader(new
                     InputStreamReader(System.in)); 
        } 
  
        String next() 
        { 
            while (st == null || !st.hasMoreElements()) 
            { 
                try
                { 
                    st = new StringTokenizer(br.readLine()); 
                } 
                catch (IOException  e) 
                { 
                    e.printStackTrace(); 
                } 
            } 
            return st.nextToken(); 
        } 
  
        int nextInt() 
        { 
            return Integer.parseInt(next()); 
        } 
  
        long nextLong() 
        { 
            return Long.parseLong(next()); 
        } 
  
        double nextDouble() 
        { 
            return Double.parseDouble(next()); 
        } 
  
        String nextLine() 
        { 
            String str = ""; 
            try
            { 
                str = br.readLine(); 
            } 
            catch (IOException e) 
            { 
                e.printStackTrace(); 
            } 
            return str; 
        } 
    } 
} 



