#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimization("unroll-loops")
using namespace std;
vector<int> ans;
void solve() {
  ans.clear();
  int n, l, x, y, i;
  cin >> n >> l >> x >> y;
  vector<int> arr;
  for (int j = 0; j < n; j++) {
    int x;
    cin >> x;
    arr.push_back(x);
  }
  for (i = 0; i < n; i++)
    if (binary_search(arr.begin(), arr.end(), arr[i] - x)) break;
  if (i == n) {
    for (i = 0; i < n; i++) {
      if (arr[i] > x) {
        ans.push_back(arr[i] - x);
        break;
      }
    }
  }
  for (i = 0; i < n; i++) {
    if (binary_search(arr.begin(), arr.end(), arr[i] - y)) break;
  }
  if (i == n) {
    for (i = 0; i < n; i++) {
      if (arr[i] > y) {
        ans.push_back(arr[i] - y);
        break;
      }
    }
  }
  if ((int)ans.size() > 1) {
    for (i = 0; i < n; i++) {
      if (binary_search(arr.begin(), arr.end(), arr[i] - x + y) &&
          arr[i] - x > 0) {
        cout << 1 << "\n";
        cout << arr[i] - x << "\n";
        return;
      }
      if (binary_search(arr.begin(), arr.end(), arr[i] - x - y) &&
          arr[i] - x > 0) {
        cout << 1 << "\n";
        cout << arr[i] - x << "\n";
        return;
      }
      if (binary_search(arr.begin(), arr.end(), arr[i] + x - y) &&
          arr[i] + x < l) {
        cout << 1 << "\n";
        cout << arr[i] + x << "\n";
        return;
      }
      if (binary_search(arr.begin(), arr.end(), arr[i] + x + y) &&
          arr[i] + x < l) {
        cout << 1 << "\n";
        cout << arr[i] + x << "\n";
        return;
      }
    }
  }
  cout << ans.size() << "\n";
  sort(ans.begin(), ans.end());
  for (int x : ans) cout << x << " ";
  cout << "\n";
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
