#include <bits/stdc++.h>
using namespace std;
const int mod = 1000000007;
vector<int> vc;
int L;
bool doit(int x, int l) {
  if (x - l >= 0) {
    int low = *lower_bound(vc.begin(), vc.end(), x - l);
    if (low == x - l) {
      return true;
    }
  }
  if (x + l <= L) {
    int low = *lower_bound(vc.begin(), vc.end(), x + l);
    if (low == x + l) return true;
  }
  return false;
}
int main() {
  int n, l, x, y, i, a, flag1 = 0, flag2 = 0, ans = 2, coord = -1;
  scanf("%d", &n), scanf("%d", &l), scanf("%d", &x), scanf("%d", &y);
  L = l;
  for (i = (1); i <= (n); ++i) {
    scanf("%d", &a);
    vc.push_back(a);
  }
  for (i = (1); i <= (n); ++i) {
    a = vc[i - 1];
    if (a >= x && flag1 == 0) {
      int low = *lower_bound(vc.begin(), vc.end(), a - x);
      flag1 = (low == a - x);
    }
    if (a >= y && flag2 == 0) {
      flag2 = ((*lower_bound(vc.begin(), vc.end(), a - y)) == a - y);
    }
    if (ans == 2) {
      if (a + x < l)
        if (doit(a + x, y)) {
          ans = 1, coord = a + x;
          continue;
        }
      if (a - x > 0)
        if (doit(a - x, y)) {
          ans = 1, coord = a - x;
          continue;
        }
      if (a + y < l)
        if (doit(a + y, x)) {
          ans = 1, coord = a + y;
          continue;
        }
      if (a - y > 0)
        if (doit(a - y, x)) {
          ans = 1, coord = a - y;
          continue;
        }
    }
  }
  if (flag1 == 1 && flag2 == 1) {
    cout << 0 << endl;
  } else if (ans == 1) {
    cout << 1 << endl << coord << endl;
  } else {
    cout << (flag1 == 0) + (flag2 == 0) << endl;
    if (flag1 == 0) cout << x << " ";
    if (flag2 == 0) cout << y;
    cout << endl;
  }
}
