Problem: Boboniu gives you

  * r red balls, 
  * g green balls, 
  * b blue balls, 
  * w white balls. 



He allows you to do the following operation as many times as you want: 

  * Pick a red ball, a green ball, and a blue ball and then change their color to white. 



You should answer if it's possible to arrange all the balls into a palindrome after several (possibly zero) number of described operations. 

Input

The first line contains one integer T (1≤ T≤ 100) denoting the number of test cases.

For each of the next T cases, the first line contains four integers r, g, b and w (0≤ r,g,b,w≤ 10^9).

Output

For each test case, print "Yes" if it's possible to arrange all the balls into a palindrome after doing several (possibly zero) number of described operations. Otherwise, print "No".

Example

Input


4
0 1 1 1
8 1 9 3
0 0 0 0
1000000000 1000000000 1000000000 1000000000


Output


No
Yes
Yes
Yes

Note

In the first test case, you're not able to do any operation and you can never arrange three balls of distinct colors into a palindrome.

In the second test case, after doing one operation, changing (8,1,9,3) to (7,0,8,6), one of those possible palindromes may be "rrrwwwbbbbrbbbbwwwrrr".

A palindrome is a word, phrase, or sequence that reads the same backwards as forwards. For example, "rggbwbggr", "b", "gg" are palindromes while "rgbb", "gbbgr" are not. Notice that an empty word, phrase, or sequence is palindrome.

Solution (in JAVA):

Solution:
import java.io.*;
import java.util.*;
public class Main {
    InputReader in;
    StringBuilder sb;
    Helper_class h;
    final long mod=1000000007;
    public static void main(String[] args) throws java.lang.Exception {
        new Main().run();
    }
    void run() throws Exception {
        in=new InputReader(System.in);
        sb = new  StringBuilder(); 
        h = new Helper_class();       
        int t=h.i();
        for(int i=1;i<=t;i++)
            solve();
        System.out.print(sb);
    }
    void solve() {
        int i, j;
        int n=4, cnt=0;
        int a[]=new int[n];
        for(i=0;i<n;i++) {
            a[i]=h.i();
            if(a[i]%2==0)
                cnt++;
        }
        if(cnt>=3) {
            sb.append("Yes\n");
            return;
        }
        if(cnt==2 || a[0]==0 || a[1]==0 || a[2]==0) {
            sb.append("No\n");
            return;
        }
        sb.append("Yes\n");


    }
    class Helper_class {
        long gcd(long a, long b){return (b==0)?a:gcd(b,a%b);}
        int gcd(int a, int b){return (b==0)?a:gcd(b,a%b);}
        String s(){return in.next();}
        int i(){return Integer.parseInt(in.next());}
        long l(){return Long.parseLong(in.next());}
        double d(){return Double.parseDouble(in.next());}
        long square(int x) {return ((long)x * (long)x);}
        long mul(long x, long y) {long ans = x*y;return (ans>=mod ? ans%mod : ans);}
        void YN(int x) {
            if(x==0)
                sb.append("NO\n");
            else
                sb.append("YES\n");
        }
        void yn(int x) {
            if(x==0)
                sb.append("No\n");
            else
                sb.append("Yes\n");
        }
        long power(long x, long y, long p) {  
            long res = 1;       
            x = x % p;  
            if (x == 0) return 0;   
            while (y > 0) {
                if((y & 1)==1) 
                    res = (res * x) % p;  
                y = y >> 1;  
                x = (x * x) % p;  
            } 
            return res%p; 
        } 
        void sorter(int a[]) {
            ArrayList<Integer> ar=new ArrayList<>();
            for(int i=0;i<a.length;i++)
                ar.add(a[i]);
            Collections.sort(ar);
            for(int i=0;i<ar.size();i++)
                a[i]=ar.get(i);
        }
        int lower(int a[], int k) {
            int l=0, r=a.length-1, ans=-1;
            while(l<=r) {
                int mid = (r+l)/2;
                if(a[mid]>k)
                    r=mid-1;
                else {
                    ans=mid;
                    l=mid+1;
                }
            }
            if(ans!=-1)
                ans=a[ans];
            return ans;
        }
        int upper(int a[], int k) {
            int l=0, r=a.length-1, ans=-1;
            while(l<=r) {
                int mid = (r+l)/2;
                if(a[mid]<k)
                    l=mid+1;
                else {
                    ans=mid;
                    r=mid-1;
                }
            }
            if(ans!=-1)
                ans=a[ans];
            return ans;
        }
        void reverse(int a[]) {
            for(int i=0;i<a.length/2;i++) {
                int x=a[i];
                a[i]=a[a.length-1-i];
                a[a.length-1-i]=x;
            }
        }
        //String.format("%.kf",x)
    }
    class InputReader {
        private InputStream stream;
        private byte[] buf = new byte[1024];
        private int curChar;
        private int numChars;
        public InputReader(InputStream stream) {
            this.stream = stream;
        }
        public int read() {
            if (numChars == -1)
                throw new UnknownError();
            if (curChar >= numChars) {
                curChar = 0;
                try {
                    numChars = stream.read(buf);
                } catch (IOException e) {
                    throw new UnknownError();
                }
                if (numChars <= 0)
                    return -1;
            }
            return buf[curChar++];
        }
        public int peek() {
            if (numChars == -1)
                return -1;
            if (curChar >= numChars) {
                curChar = 0;
                try {
                    numChars = stream.read(buf);
                } catch (IOException e) {
                    return -1;
                }
                if (numChars <= 0)
                    return -1;
            }
            return buf[curChar];
        }
        public void skip(int x) {
            while (x-->0)
                read();
        }
        public int nextInt() {
            return Integer.parseInt(next());
        }
        public long nextLong() {
            return Long.parseLong(next());
        }
        public String nextString() {
            return next();
        }
        public String next() {
            int c = read();
            while (isSpaceChar(c))
                c = read();
            StringBuffer res = new StringBuffer();
            do {
                res.appendCodePoint(c);
                c = read();
            } while (!isSpaceChar(c));
 
            return res.toString();
        }
        public String nextLine() {
            StringBuffer buf = new StringBuffer();
            int c = read();
            while (c != '\n' && c != -1) {
                if (c != '\r')
                    buf.appendCodePoint(c);
                c = read();
            }
            return buf.toString();
        }
        public double nextDouble() {
            int c = read();
            while (isSpaceChar(c))
                c = read();
            int sgn = 1;
            if (c == '-') {
                sgn = -1;
                c = read();
            }
            double res = 0;
            while (!isSpaceChar(c) && c != '.') {
                if (c == 'e' || c == 'E')
                    return res * Math.pow(10, nextInt());
                if (c < '0' || c > '9')
                    throw new InputMismatchException();
                res *= 10;
                res += c - '0';
                c = read();
            }
            if (c == '.') {
                c = read();
                double m = 1;
                while (!isSpaceChar(c)) {
                    if (c == 'e' || c == 'E')
                        return res * Math.pow(10, nextInt());
                    if (c < '0' || c > '9')
                        throw new InputMismatchException();
                    m /= 10;
                    res += (c - '0') * m;
                    c = read();
                }
            }
            return res * sgn;
        }
        public boolean hasNext() {
            int value;
            while (isSpaceChar(value = peek()) && value != -1)
                read();
            return value != -1;
        }
        private boolean isSpaceChar(int c) {
            return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
        }
    }
}