#include <bits/stdc++.h>
using namespace std;
int binsearch(const vector<int> &T, int orig, int beg, int end, int val) {
  if (beg == end) {
    if (T[beg] - T[orig] == val)
      return beg;
    else
      return -1;
  }
  int sr = (beg + end) / 2;
  if (T[sr] - T[orig] >= val)
    return binsearch(T, orig, beg, sr, val);
  else
    return binsearch(T, orig, sr + 1, end, val);
}
vector<pair<int, int> > find_all(const vector<int> &T, int val) {
  vector<pair<int, int> > ans;
  int n = T.size();
  for (int(i) = (0); i <= (n - 2); ++(i)) {
    int a = binsearch(T, i, i + 1, n - 1, val);
    if (a != -1) ans.push_back(make_pair(i, a));
  }
  return ans;
}
int main() {
  int n, l, x, y;
  scanf("%d %d %d %d", &n, &l, &x, &y);
  vector<int> T(n);
  vector<int> ans;
  for (int i = 0; i < (n); ++i) scanf("%d", &T[i]);
  vector<pair<int, int> > X = find_all(T, x);
  vector<pair<int, int> > Y = find_all(T, y);
  if (X.empty() || Y.empty()) {
    if (X.empty() && Y.empty()) {
      vector<pair<int, int> > P = find_all(T, x + y);
      if (!P.empty())
        ans.push_back(T[P.front().first] + x);
      else {
        vector<pair<int, int> > N = find_all(T, y - x);
        for (auto &&p : N) {
          int a = T[p.first] - x, b = T[p.second] + x;
          if (a > 0) {
            ans.push_back(a);
            break;
          }
          if (b < l) {
            ans.push_back(b);
            break;
          }
        }
        if (ans.empty()) {
          ans.push_back(x);
          ans.push_back(y);
        }
      }
    } else {
      int a = (X.empty()) ? x : y;
      ans.push_back(a);
    }
  }
  printf("%d\n", (int)ans.size());
  for (auto &&x : ans) printf("%d ", x);
  printf("\n");
  return 0;
}
