There is a white sheet of paper lying on a rectangle table. The sheet is a rectangle with its sides parallel to the sides of the table. If you will take a look from above and assume that the bottom left corner of the table has coordinates (0, 0), and coordinate axes are left and bottom sides of the table, then the bottom left corner of the white sheet has coordinates (x_1, y_1), and the top right — (x_2, y_2).

After that two black sheets of paper are placed on the table. Sides of both black sheets are also parallel to the sides of the table. Coordinates of the bottom left corner of the first black sheet are (x_3, y_3), and the top right — (x_4, y_4). Coordinates of the bottom left corner of the second black sheet are (x_5, y_5), and the top right — (x_6, y_6). 

<image> Example of three rectangles.

Determine if some part of the white sheet can be seen from the above after the two black sheets are placed. The part of the white sheet can be seen if there is at least one point lying not strictly inside the white sheet and strictly outside of both black sheets.

Input

The first line of the input contains four integers x_1, y_1, x_2, y_2 (0 ≤ x_1 < x_2 ≤ 10^{6}, 0 ≤ y_1 < y_2 ≤ 10^{6}) — coordinates of the bottom left and the top right corners of the white sheet.

The second line of the input contains four integers x_3, y_3, x_4, y_4 (0 ≤ x_3 < x_4 ≤ 10^{6}, 0 ≤ y_3 < y_4 ≤ 10^{6}) — coordinates of the bottom left and the top right corners of the first black sheet.

The third line of the input contains four integers x_5, y_5, x_6, y_6 (0 ≤ x_5 < x_6 ≤ 10^{6}, 0 ≤ y_5 < y_6 ≤ 10^{6}) — coordinates of the bottom left and the top right corners of the second black sheet.

The sides of each sheet of paper are parallel (perpendicular) to the coordinate axes.

Output

If some part of the white sheet can be seen from the above after the two black sheets are placed, print "YES" (without quotes). Otherwise print "NO".

Examples

Input


2 2 4 4
1 1 3 5
3 1 5 5


Output


NO


Input


3 3 7 5
0 0 4 6
0 0 7 4


Output


YES


Input


5 2 10 5
3 1 7 6
8 1 11 7


Output


YES


Input


0 0 1000000 1000000
0 0 499999 1000000
500000 0 1000000 1000000


Output


YES

Note

In the first example the white sheet is fully covered by black sheets.

In the second example the part of the white sheet can be seen after two black sheets are placed. For example, the point (6.5, 4.5) lies not strictly inside the white sheet and lies strictly outside of both black sheets.
import java.io.*;
import java.util.*;
import java.text.*;
import java.lang.*;
import java.math.*;
 
public class Myclass{
	static ArrayList[] a=new ArrayList[200001];
	static long val=999999999L;
	
	static long f(long a[],long b[]) {
		long x=Math.max(a[0], b[0]);
		long y=Math.max(a[1], b[1]);
		long x1=Math.min(a[2], b[2]);
		long y1=Math.min(a[3], b[3]);
		long area=(x1-x);
		if(area < 0) return 0L;
		area*=(y1-y);
		if(area < 0) return 0L;
		return area;
	}
	static long f1(long a[],long b[],long c[]) {
		long x=Math.max(a[0], b[0]);
		long y=Math.max(a[1], b[1]);
		long x1=Math.min(a[2], b[2]);
		long y1=Math.min(a[3], b[3]);
		x=Math.max(x, c[0]);
		y=Math.max(y, c[1]);
		x1=Math.min(x1, c[2]);
		y1=Math.min(y1, c[3]);
		long area=(x1-x);
		if(area < 0) return 0L;
		area*=(y1-y);
		if(area < 0) return 0L;
		return area;
	}
    public void solve () {
        InputReader in = new InputReader(System.in);
        PrintWriter pw = new PrintWriter(System.out); 
        long a[]=new  long [4];
        long b[]=new  long [4];
        long c[]=new  long [4];
        for(int i=0;i<4;i++)
        	a[i]=in.nextLong();
        for(int i=0;i<4;i++) {
        	b[i]=in.nextLong();
        }
        for(int i=0;i<4;i++) {
        	c[i]=in.nextLong();
        }
        long sum=f(a,b);
        sum+=f(a,c);
        sum-=f1(b,c,a);
        if(sum==f(a,a))
        	pw.print("NO");
        else
        	pw.print("YES");
        pw.flush();
        pw.close();
    }
    public static void main(String[] args) throws Exception {
        
        
        new Thread(null,new Runnable() {
            public void run() {
                new Myclass().solve();
            }
        },"1",1<<26).start();
    }
   
    static void debug(Object... o) {
        System.out.println(Arrays.deepToString(o));
        }
        
        static class InputReader 
        {
        private final InputStream stream;
        private final byte[] buf = new byte[8192];
        private int curChar, snumChars;
        private SpaceCharFilter filter;
 
        public InputReader(InputStream stream) 
        {
            this.stream = stream;
        }
        public int snext() 
        {
            if (snumChars == -1)
                throw new InputMismatchException();
            if (curChar >= snumChars) 
            {
                curChar = 0;
                try 
                {
                    snumChars = stream.read(buf);
                } 
                catch (IOException e) 
                {
                    throw new InputMismatchException();
                }
                if (snumChars <= 0)
                    return -1;
            }
            return buf[curChar++];
        }
 
        public int nextInt() 
        {
            int c = snext();
            while (isSpaceChar(c)) 
            {
                c = snext();
            }
            int sgn = 1;
            if (c == '-')
            {
                sgn = -1;
                c = snext();
            }
            int res = 0;
            do 
            {
                if (c < '0' || c > '9')
                    throw new InputMismatchException();
                res *= 10;
                res += c - '0';
                c = snext();
            } while (!isSpaceChar(c));
            return res * sgn;
        }
 
        public long nextLong()
        {
            int c = snext();
            while (isSpaceChar(c)) 
            {
                c = snext();
            }
            int sgn = 1;
            if (c == '-') 
            {
                sgn = -1;
                c = snext();
            }
            long res = 0;
            do 
            {
                if (c < '0' || c > '9')
                    throw new InputMismatchException();
                res *= 10;
                res += c - '0';
                c = snext();
            } while (!isSpaceChar(c));
            return res * sgn;
        }
 
        public int[] nextIntArray(int n) 
        {
            int a[] = new int[n];
            for (int i = 0; i < n; i++) 
            {
                a[i] = nextInt();
            }
            return a;
        }
 
        public String readString()
        {
            int c = snext();
            while (isSpaceChar(c)) 
            {
                c = snext();
            }
            StringBuilder res = new StringBuilder();
            do 
            {
                res.appendCodePoint(c);
                c = snext();
            } while (!isSpaceChar(c));
            return res.toString();
        }
 
        public String nextLine() 
        {
            int c = snext();
            while (isSpaceChar(c))
                c = snext();
            StringBuilder res = new StringBuilder();
            do 
            {
                res.appendCodePoint(c);
                c = snext();
            } while (!isEndOfLine(c));
            return res.toString();
        }
 
        public boolean isSpaceChar(int c) 
        {
            if (filter != null)
                return filter.isSpaceChar(c);
            return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
        }
 
        private boolean isEndOfLine(int c) 
        {
            return c == '\n' || c == '\r' || c == -1;
        }
 
        public interface SpaceCharFilter
        {
            public boolean isSpaceChar(int ch);
        }
    }
        public static long mod = 1000000007;
        public static int d;
        public static int p;
        public static int q;
        public void extended(int a,int b) {
            if(b==0) {
                d=a;
                p=1;
                q=0;
            }
            else
            {
                extended(b,a%b);
                int temp=p;
                p=q;
                q=temp-(a/b)*q;
            }
        }
        public static int binaryExponentiation(int x,int n)
        {
            int result=1;
            while(n>0)
            {
                if(n % 2 ==1)
                    result=result * x;
                x=x*x;
                n=n/2;
            }
            return result;
        }
        
        public static long binaryExponentiation(long x,long n)
        {
            long result=1;
            while(n>0)
            {
                if(n % 2 ==1)
                    result=result * x;
                x=x*x;
                n=n/2;
            }
            return result;
        }
        
        public static long[] shuffle(long[] a,Random gen)
        {
            int n = a.length;
            for(int i=0;i<n;i++)
            {
                int ind = gen.nextInt(n-i)+i;
                long temp = a[ind];
                a[ind] = a[i];
                a[i] = temp;
            }
            return a;
        }
        
        public static void swap(int a, int b){
            int temp = a;
            a = b;
            b = temp;
        }
        
        public static HashSet<Integer> primeFactorization(int n)
        {
            HashSet<Integer> a =new HashSet<Integer>();
            for(int i=2;i*i<=n;i++)
            {
                while(n%i==0)
                {
                    a.add(i);
                    n/=i;
                }
            }
            if(n!=1)
                a.add(n);
            return a;
        }
        
        public static void sieve(boolean[] isPrime,int n)
        {
            for(int i=1;i<n;i++)
                isPrime[i] = true;
            
            isPrime[0] = false;
            isPrime[1] = false;
            
            for(int i=2;i*i<n;i++)
            {
                if(isPrime[i] == true)
                {
                    for(int j=(2*i);j<n;j+=i)
                        isPrime[j] = false;
                }
            }
        }
        
        public static long GCD(long n,long m)
        {
            if(m==0)
                return n;
            else
                return GCD(m,n%m);
        }
        
        static class pair implements Comparable<pair>
        {
          Long x,y;
            pair(long l,long m)
            {
                this.x=l;
                this.y=m;
            }
 
           

			public int compareTo(pair o) {
                int result = x.compareTo(o.x);
                if(result==0)
                    result = y.compareTo(o.y);
                
                return result;
            }  
            
            public String toString()
            {
                return (x+1)+" "+(y+1);
            }
            
            public boolean equals(Object o)
            {
                if (o instanceof pair)
                {
                    pair p = (pair)o;
                    return p.x.equals(x) && p.y.equals(y) ;
                }
                return false;
            }
            
            public int hashCode()
            {
                return new Long(x).hashCode()*31 + new Long(y).hashCode();
            }
        }
        public static int modularExponentiation(int x,int n,int M)
        {
            int result=1;
            while(n>0)
            {
                if(n % 2 ==1)
                    result=(result * x)%M;
                x=(x%M*x)%M;
                n=n/2;
            }
            return result;
        }
        
        public static long modularExponentiation(long x,long n,long M)
        {
            long result=1;
            while(n>0)
            {
                if(n % 2 ==1)
                    result=(result%M * x%M)%M;
                x=(x%M * x%M)%M;
                n=n/2;
            }
            return result;
        }
        
        public static long modInverse(int A,int M)
        {
            return modularExponentiation(A,M-2,M);
        }
        
        public static long modInverse(long A,long M)
        {
            return modularExponentiation(A,M-2,M);
        }
        
    
}
 
class dsu{
    int parent[];
    long sz[];
    dsu(int n){
        parent=new int[n+1];
        sz=new long[n+1];
        for(int i=0;i<=n;i++)
        {
            parent[i]=i;
            sz[i]=1;
        }
    }
    int root(int n) {
        while(parent[n]!=n)
        { 
            parent[n]=parent[parent[n]];
            n=parent[n];
        }
        return n;
    }
    void union(int _a,int _b) {
        int p_a=root(_a);
        int p_b=root(_b);
        
        parent[p_a]=p_b;
        sz[p_b]+=sz[p_a];
            
    }
    long find(int a,int b) {
    	int root_a=root(a);
    	int root_b=root(b);
        if(root_a==root_b)
            return 0;
        else
            return  sz[root_a]*sz[root_b];
    }
    
    
}
class Segment{ 
    long seg[];
    int [] a;

    int lazy[];
    Segment (int n,int[] c){
    	a=c.clone();
        seg=new long[4*n];
        lazy=new int[4*n];
    }
    public void build(int node,int start,int end) {
        if(start==end) {
            seg[node]=a[start];
            return ;
        }
        int mid=(start+end)/2;
        build(2*node+1,start,mid);
        build(2*node+2,mid+1,end);
        seg[node]=Math.min(seg[2*node+1],seg[2*node+2]);
    }
    
   
    public void update(int node,int start,int end,int fi,int val) {
        if(start==end) {
            seg[node]=val;
            return;
        }
        int mid=(start+end)/2;
        if(fi>=start && fi<=mid) {
            update(2*node+1,start,mid,fi,val);
        }
        else
            update(2*node+2,mid+1,end,fi,val);
        seg[node]=Math.max(seg[2*node+1],seg[2*node+2]);
    }
    public long query(int node,int start,int end,int l,int r) {
        if(l>end || r<start)
            return Long.MAX_VALUE;
        if(start>=l && end<=r)
            return seg[node];
        
        int  mid=(start+end)/2;
        return Math.min(query(2*node+1,start,mid,l,r),query(2*node+2,mid+1,end,l,r));
    }
    public void updateRange(int node,int start,int end,int l,int r,int val) {
        if(lazy[node]!=0) {
            seg[node]-=lazy[node];
            if(start!=end) {
                lazy[2*node+1]+=lazy[node];
                lazy[2*node+2]+=lazy[node];
            }
            lazy[node]=0;
        }
        if(l>end || r<start)
            return ;
        if(start>=l && end<=r) {
            seg[node]-=val;
            if(start!=end) {
                lazy[2*node+1]+=val;
                lazy[2*node+2]+=val;
            }
            return ;
        }
        int mid=(start+end)/2;
        updateRange(2*node+1,start,mid,l,r,val);
        updateRange(2*node+2,mid+1,end,l,r,val);
        seg[node]=Math.min(seg[2*node+1],seg[2*node+2]);
    }
    public long queryRange(int node,int start,int end,int l,int r) {
        if(lazy[node]!=0L) {
            seg[node]-=lazy[node];
            if(start!=end) {
                lazy[2*node+1]+=lazy[node];
                lazy[2*node+2]+=lazy[node];
            }
            lazy[node]=0;
        }
        if(l>end || r<start)
            return Long.MAX_VALUE;
        if(start>=l && end<=r)
            return seg[node];
        
        int  mid=(start+end)/2;
        return Math.min(queryRange(2*node+1,start,mid,l,r),queryRange(2*node+2,mid+1,end,l,r));
    }
    
}
class query{
	Long x;
	Integer y;
	query(long x,int y){
		this.x=x;
		this.y=y;
	}
}
