#include <bits/stdc++.h>
using namespace std;
const int INF = 1e8;
const int MAXM = 100000007;
const int MAX = 1e7;
const int des = 10000;
const int maxn = 100005;
int main() {
  map<int, bool> mp;
  vector<int> g;
  int n, l, x, y;
  cin >> n >> l >> x >> y;
  for (int i = 0; i < n; i++) {
    int tmp;
    cin >> tmp;
    g.push_back(tmp);
    mp[tmp] = true;
  }
  bool nadX = true;
  for (int i = 0; i < n - 1; i++) {
    if (g[i] + x <= l && mp.find(g[i] + x) != mp.end()) {
      nadX = false;
      break;
    }
  }
  bool nadY = true;
  for (int i = 0; i < n - 1; i++) {
    if (g[i] + y <= l && mp.find(g[i] + y) != mp.end()) {
      nadY = false;
      break;
    }
  }
  if (nadX && nadY) {
    for (int i = 0; i < n; i++) {
      int plusa = g[i] + x - y, minusa = g[i] - x + y;
      if (mp.find(plusa) != mp.end() && g[i] + x <= l) {
        cout << "1\n" << g[i] + x << endl;
        return 0;
      }
      if (mp.find(minusa) != mp.end() && g[i] - x > 0) {
        cout << "1\n" << g[i] - x << endl;
        return 0;
      }
      int plusa1 = g[i] + x + y, minusa1 = g[i] - x - y;
      if (mp.find(plusa1) != mp.end() && g[i] + x + y <= l) {
        cout << "1\n" << g[i] + x << endl;
        return 0;
      }
      if (mp.find(minusa1) != mp.end() && g[i] - x - y > 0) {
        cout << "1\n" << g[i] - x << endl;
        return 0;
      }
    }
    cout << 2 << endl << x << " " << y << endl;
    return 0;
  }
  if (nadX) {
    cout << 1 << endl << x;
    return 0;
  }
  if (nadY) {
    cout << 1 << endl << y;
    return 0;
  }
  cout << 0;
}
