#include <bits/stdc++.h>
using namespace std;
int main() {
  long long n, l, x, y;
  set<long long> Set;
  while (cin >> n >> l >> x >> y) {
    for (int i = 1; i <= n; ++i) {
      long long t;
      scanf("%I64d", &t);
      Set.insert(t);
    }
    bool checkx = 0;
    bool checky = 0;
    for (set<long long>::iterator it = Set.begin(); it != Set.end(); it++) {
      if (Set.find(*it + x) != Set.end()) {
        checkx = 1;
      }
      if (Set.find(*it + y) != Set.end()) {
        checky = 1;
      }
      if (checkx && checky) {
        break;
      }
    }
    if (checkx && checky) {
      cout << 0 << endl;
      break;
    }
    if (checkx) {
      cout << 1 << endl;
      cout << y << endl;
      break;
    }
    if (checky) {
      cout << 1 << endl;
      cout << x << endl;
      break;
    }
    bool find = 0;
    long long ans = 0;
    for (set<long long>::iterator it = Set.begin(); it != Set.end(); it++) {
      if ((*it + x <= l) && Set.find(*it + x + y) != Set.end()) {
        find = 1;
        ans = *it + x;
        break;
      }
      if ((*it + x <= l) && Set.find(*it + x - y) != Set.end()) {
        find = 1;
        ans = *it + x;
        break;
      }
      if ((*it - x >= 0) && Set.find(*it - x + y) != Set.end()) {
        find = 1;
        ans = *it - x;
        break;
      }
      if ((*it - x >= 0) && Set.find(*it - x - y) != Set.end()) {
        find = 1;
        ans = *it - x;
        break;
      }
    }
    if (find) {
      cout << 1 << endl;
      cout << ans << endl;
      break;
    }
    cout << 2 << endl;
    cout << x << " " << y << endl;
  }
  return 0;
}
