#include <bits/stdc++.h>
using namespace std;
long long MOD_EXPO(long long b, long long p, long long m) {
  if (p == 0) return 1;
  long long ret = MOD_EXPO(b, p / 2, m) % m;
  ret = (ret * ret) % m;
  return ((p & 1) ? (ret * b) % m : ret % m);
}
long long POWER(long long N, long long K) {
  long long i, ans = 1;
  for (i = 1; i <= K; i++) ans *= N;
  return ans;
}
int SET(int N, int pos) { return (N | (1 << pos)); }
int RESET(int N, int pos) { return (N & !(1 << pos)); }
bool CHECK(int N, int pos) { return (N & (1 << pos)); }
int dx4[] = {1, -1, 0, 0};
int dy4[] = {0, 0, 1, -1};
int dx6[] = {0, 0, 1, -1, 0, 0};
int dy6[] = {1, -1, 0, 0, 0, 0};
int dz6[] = {0, 0, 0, 0, 1, -1};
int dx8[] = {1, -1, 0, 0, -1, 1, -1, 1};
int dy8[] = {0, 0, 1, -1, 1, 1, -1, -1};
int dkx8[] = {-1, 1, -1, 1, -2, -2, 2, 2};
int dky8[] = {2, 2, -2, -2, 1, -1, 1, -1};
int tc = 1;
const double eps = 1e-9;
const double pi = acos(-1.0);
const long long int mx = 1e5;
const long long int mod = 1e9 + 7;
long long arr[mx + 5];
int main() {
  long long n, l, x, y, diff, i, a, b, c, d, e, sum, bal;
  bool xflag, yflag, dflag, bflag, cflag;
  while (cin >> n >> l >> x >> y) {
    map<long long, bool> mp;
    vector<long long> idx;
    for (i = 1; i <= n; i++) {
      scanf("%lld", &arr[i]);
      mp[arr[i]] = true;
    }
    xflag = yflag = dflag = bflag = cflag = false;
    for (i = 1; i <= n; i++) {
      a = x + arr[i];
      b = y + arr[i];
      c = (y - x) + arr[i];
      d = x + y + arr[i];
      e = y - x;
      if (mp[a]) xflag = true;
      if (mp[b]) yflag = true;
      if (mp[c] && !dflag && (c - y >= 0 || c + x <= l)) diff = c, dflag = true;
      if (mp[d] && !bflag && (d - y >= 0 || d + x <= l)) sum = d, bflag = true;
      if (mp[e] && !cflag && (e - y >= 0 || e + x <= l)) bal = e, cflag = true;
    }
    if (!xflag && !yflag) {
      if (mp[x + y])
        idx.push_back(x);
      else if (cflag && bal + x <= l)
        idx.push_back(bal + x);
      else if (bflag && sum - y >= 0)
        idx.push_back(sum - y);
      else if (bflag && sum + x <= l)
        idx.push_back(sum + x);
      else if (dflag && diff - y >= 0)
        idx.push_back(diff - y);
      else if (dflag && diff + x <= l)
        idx.push_back(diff + x);
      else
        idx.push_back(x), idx.push_back(y);
    } else if (!xflag) {
      idx.push_back(x);
    } else if (!yflag) {
      idx.push_back(y);
    }
    cout << idx.size() << "\n";
    for (i = 0; i < idx.size(); i++) printf("%lld ", idx[i]);
    printf("\n");
  }
  return 0;
}
