#include <bits/stdc++.h>
using namespace std;
const long double EPS = 1e-10;
const int INF = (int)(1e9);
const long long mod = (int)(1e+9 + 7);
const int N = (int)(1e5);
int days_month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int d[N];
int n, l, x, y;
int exist(int dist, int left, int rigth) {
  int it1, it2;
  it1 = it2 = 0;
  while (it2 != n) {
    int dif = d[it2] - d[it1];
    if (dif == dist) {
      if (d[it2] - left >= 0) return d[it2];
      if (d[it2] + rigth <= l) return d[it2];
    }
    if (dif < dist)
      it2++;
    else
      it1++;
  }
  return 0;
}
int exist_x;
int exist_y;
int exist_xaddy;
int exist_xresy;
vector<int> ans;
void solve() {
  exist_x = exist(x, x, x);
  exist_y = exist(y, y, y);
  int exist_xaddy = exist(x + y, x + y, x + y);
  if (exist_xaddy) {
    exist_xaddy -= x;
  }
  int exist_xresy = exist(y - x, y, x);
  if (exist_xresy) {
    if (exist_xresy + x <= l) {
      exist_xresy += x;
    } else {
      if (exist_xresy - y >= 0) {
        exist_xresy -= y;
      } else {
        exist_xresy = 0;
      }
    }
  }
  int cnt = 0;
  if (!exist_x) cnt++;
  if (!exist_y) cnt++;
  if (cnt == 0) return;
  if (exist_xaddy) {
    ans.push_back(exist_xaddy);
    return;
  }
  if (exist_xresy) {
    ans.push_back(exist_xresy);
    return;
  }
  if (!exist_x) ans.push_back(x);
  if (!exist_y) ans.push_back(y);
}
int main() {
  cin >> n >> l >> x >> y;
  for (int i = 0; i < n; i++) {
    scanf("%d", &d[i]);
  }
  solve();
  printf("%d\n", int(ans.size()));
  for (int x : ans) {
    printf("%d ", x);
  }
  return 0;
}
