#include <bits/stdc++.h>
using namespace std;
bool isPrime(int n) {
  int k = 0;
  for (int j = 2; j < sqrt(n); j++) {
    if (j > n / 2) break;
    if (n % j == 0) k++;
    if (k > 0) {
      return false;
      break;
    }
  }
  if (k == 0) return true;
}
bool isOnSameLine(int x1, int y1, int x2, int y2, int x3, int y3) {
  return (y1 - y2) * (x1 - x3) == (y1 - y3) * (x1 - x2);
}
bool visited[200001], recStack[200001];
vector<vector<int> > G;
int N;
void BFS(int Start) {
  queue<int> queue;
  queue.push(Start);
  vector<int>::iterator i;
  while (!queue.empty()) {
    Start = queue.front();
    visited[Start] = true;
    queue.pop();
    for (i = G[Start].begin(); i != G[Start].end(); i++) {
      if (!visited[*i]) queue.push(*i);
      if (visited[*i]) {
        N = *i;
        return;
      }
    }
  }
}
void bfs(int Start) {
  queue<int> queue;
  queue.push(Start);
  vector<int>::iterator i;
  while (!queue.empty()) {
    Start = queue.front();
    visited[Start] = true;
    queue.pop();
    for (i = G[Start].begin(); i != G[Start].end(); i++) {
      if (!visited[*i]) queue.push(*i);
    }
  }
}
int main() {
  int x, y, z;
  int a, b, c;
  cin >> x >> y >> z;
  cin >> a >> b >> c;
  int k = 0, m = 0;
  if (x - a >= 0)
    k += (x - a) / 2;
  else
    m += a - x;
  if (y - b >= 0)
    k += (y - b) / 2;
  else
    m += b - y;
  if (z - c >= 0)
    k += (z - c) / 2;
  else
    m += c - z;
  if (k >= m)
    cout << "YES";
  else
    cout << "NO";
}
