#include <bits/stdc++.h>
using namespace std;
long long MOD = 998244353;
long long power(long long x, long long n, long long mod) {
  if (n == 0) {
    return 1;
  }
  long long temp = power(x, n / 2, mod);
  if (n % 2 == 1) {
    return (x * temp * temp) % mod;
  } else {
    return (temp * temp) % mod;
  }
}
long long abs(long long a, long long b) {
  if (a > b) {
    return a - b;
  }
  return b - a;
}
long long fac(long long n) {
  long long sol = 1;
  for (long long i = 1; i <= n; i++) {
    sol *= i;
    sol %= MOD;
  }
  return sol;
}
long long size(long long n) {
  long long sol = 0;
  while (n) {
    n /= 2;
    sol++;
  }
  return sol;
}
long long fromBinary(string n) {
  long long sol = 0;
  for (long long i = 0; i < n.size(); i++) {
    sol += n[i] - '0';
    sol *= 2;
  }
  return sol / 2;
}
vector<long long> num;
set<long long> num2;
vector<long long> deleted;
void check(long long a, long long b, bool deleteOrNo) {
  if (num2.count(abs(a - b))) {
    check(abs(a - b), a, true);
  } else if (deleteOrNo) {
    num2.erase(a);
    deleted.push_back(a);
  }
}
bool thinksHeIsBetter(long long a, long long b) {
  while (1) {
    if (a % 2 == 1 && b % 2 == 0) {
      return true;
    } else {
      a /= 2;
      b /= 2;
    }
    if (a == 0 && b == 0) {
      return false;
    }
  }
}
long long k;
vector<long long> primes;
pair<long long, long long> makeTwin(long long n) {
  long long twin = 1;
  long long exp;
  long long betterN = 1;
  for (long long i = 0; i <= primes.size() - 1; i++) {
    if (k >= 4 && i > 16 && n > 1) {
      return make_pair(-1, -1);
    }
    if (k >= 3 && i > 70 && n > 1) {
      return make_pair(-1, -1);
    }
    if (i > 70) {
      break;
    }
    if (primes[i] != n) {
      if (primes[i] * primes[i] > n) {
        continue;
      }
    }
    exp = 0;
    while (n % primes[i] == 0) {
      exp++;
      n /= primes[i];
    }
    if (exp == 0) {
      continue;
    }
    exp %= k;
    betterN *= power(primes[i], exp, 1000000000000000);
    if (exp == 0) {
      exp = k;
    }
    twin *= power(primes[i], k - exp, 1000000000000000);
    if (twin > 100000) {
      return make_pair(-1, -1);
    }
  }
  if (n > 1) {
    twin *= n;
    if (twin > 100000) {
      return make_pair(-1, -1);
    }
    betterN *= n;
  }
  return make_pair(twin, betterN);
}
int main(int argc, const char* argv[]) {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  long long a, b, c, d;
  cin >> a >> b >> c >> d;
  if (a - 1 == b && c == 0 && d == 0) {
    cout << "YES" << endl;
    for (long long i = 0; i <= b - 1; i++) {
      cout << "0 1 ";
    }
    cout << "0" << endl;
    return 0;
  }
  if (a == 0 && b == 0 && c + 1 == d) {
    cout << "YES" << endl;
    for (long long i = 0; i <= c - 1; i++) {
      cout << "3 2 ";
    }
    cout << "3" << endl;
    return 0;
  }
  if (abs(a + c - b - d) >= 2) {
    cout << "NO" << endl;
    return 0;
  }
  vector<long long> solution;
  long long left = a;
  long long right = d;
  long long mid1 = b - left;
  long long mid2 = c - right;
  if (left < 0 || right < 0 || (abs(mid1, mid2) > 1) || mid1 < 0 || mid2 < 0) {
    cout << "NO" << endl;
    return 0;
  }
  if (mid1 < mid2) {
    while (left) {
      solution.push_back(0);
      solution.push_back(1);
      left--;
    }
    solution.push_back(2);
    while (right) {
      solution.push_back(3);
      solution.push_back(2);
      right--;
    }
    while (mid1) {
      solution.push_back(1);
      solution.push_back(2);
      mid1--;
    }
  } else if (mid1 == mid2) {
    while (left) {
      solution.push_back(0);
      solution.push_back(1);
      left--;
    }
    while (right) {
      solution.push_back(2);
      solution.push_back(3);
      right--;
    }
    while (mid1) {
      solution.push_back(2);
      solution.push_back(1);
      mid1--;
    }
  } else {
    while (right) {
      solution.push_back(3);
      solution.push_back(2);
      right--;
    }
    solution.push_back(1);
    while (left) {
      solution.push_back(0);
      solution.push_back(1);
      left--;
    }
    while (mid2) {
      solution.push_back(2);
      solution.push_back(1);
      mid2--;
    }
  }
  cout << "YES" << endl;
  for (long long j = 0; j <= solution.size() - 1; j++) {
    if (j != 0) {
      cout << " ";
    }
    cout << solution[j];
  }
  cout << endl;
  return 0;
}
