#include <bits/stdc++.h>
using namespace std;
const long long mod = 1000000007;
int main() {
  int n, l, x, y;
  int ans = 0;
  cin >> n >> l >> x >> y;
  std::vector<int> a;
  int z;
  for (int i = 0; i < n; i++) {
    cin >> z;
    a.push_back(z);
  }
  std::vector<int> gm, gf;
  std::vector<int> cm, cf;
  for (int i = 0; i < n; i++) {
    cm.push_back(a[i]);
    cm.push_back(a[i] + y);
    cf.push_back(a[i]);
    cf.push_back(a[i] + x);
  }
  sort((cm).begin(), (cm).end());
  sort((cf).begin(), (cf).end());
  bool m = false;
  bool f = false;
  for (int i = 1; i < 2 * n; i++)
    if (cm[i] == cm[i - 1]) m = true;
  for (int i = 1; i < 2 * n; i++)
    if (cf[i] == cf[i - 1]) f = true;
  if (m && f) {
    cout << 0;
    return 0;
  }
  if (m || f) {
    cout << 1 << endl;
    if (m)
      cout << x;
    else
      cout << y;
    return 0;
  }
  for (int i = 0; i < n; i++) {
    if (a[i] >= y) gm.push_back(a[i] - y);
    if (a[i] + y <= l) gm.push_back(a[i] + y);
    if (a[i] >= x) gf.push_back(a[i] - x);
    if (a[i] + x <= l) gf.push_back(a[i] + x);
  }
  sort((gf).begin(), (gf).end());
  sort((gm).begin(), (gm).end());
  int fs = gf.size();
  int ms = gm.size();
  int curf = 0, curm = 0;
  while ((curf < fs) && (curm < ms)) {
    if (gf[curf] == gm[curm]) {
      cout << 1 << endl << gf[curf];
      return 0;
    } else if (gf[curf] > gm[curm]) {
      curm++;
    } else
      curf++;
  }
  cout << 2 << endl;
  cout << x << " " << y;
  return 0;
}
