Carl is a beginner magician. He has a blue, b violet and c orange magic spheres. In one move he can transform two spheres of the same color into one sphere of any other color. To make a spell that has never been seen before, he needs at least x blue, y violet and z orange spheres. Can he get them (possible, in multiple actions)?
The first line of the input contains three integers a, b and c (0 ≤ a, b, c ≤ 1 000 000) — the number of blue, violet and orange spheres that are in the magician's disposal.
The second line of the input contains three integers, x, y and z (0 ≤ x, y, z ≤ 1 000 000) — the number of blue, violet and orange spheres that he needs to get.
If the wizard is able to obtain the required numbers of spheres, print "Yes". Otherwise, print "No".
4 4 0 2 1 2
Yes
5 6 1 2 7 2
No
3 3 3 2 2 2
Yes
Note
In the first sample the wizard has 4 blue and 4 violet spheres. In his first action he can turn two blue spheres into one violet one. After that he will have 2 blue and 5 violet spheres. Then he turns 4 violet spheres into 2 orange spheres and he ends up with 2 blue, 1 violet and 2 orange spheres, which is exactly what he needs.
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
int a, b, c, x, y, z;
int u, v;//u = 1, v = -2
int main()
{
scanf("%d %d %d", &a, &b, &c);
scanf("%d %d %d", &x, &y, &z);
u = v = 0;
if(a > x){
if((a - x)%2==1) u++, v = v + (a+1-x)/2;
else v = v + (a-x)/2;
}
if(b > y){
if((b - y)%2==1) u++, v = v + (b+1-y)/2;
else v = v + (b-y)/2;
}
if(c > z){
if((c - z)%2==1) u++, v = v + (c+1-z)/2;
else v = v + (c-z)/2;
}
if(a < x) u += (x-a);
if(b < y) u += (y-b);
if(c < z) u += (z-c);
if(u <= v) printf("YES\n");
else printf("NO\n");
}