#include <bits/stdc++.h>
using namespace std;
int a[100100];
int main() {
  int n, l, x, y;
  int i;
  set<int> s;
  set<int>::iterator st;
  set<int>::iterator st1;
  set<int>::iterator st2;
  while (scanf("%d%d%d%d", &n, &l, &x, &y) == 4) {
    s.clear();
    for (i = 0; i < n; i++) {
      scanf("%d", &a[i]);
      s.insert(a[i]);
    }
    st = s.end();
    int flagx = 0, flagy = 0;
    for (i = 0; i < n; i++) {
      if (s.find(a[i] + x) != st) {
        flagx = 1;
      }
      if (s.find(a[i] + y) != st) {
        flagy = 1;
      }
    }
    if (flagx == 1 && flagy == 1) {
      printf("0\n");
      continue;
    }
    if ((flagx != 0 && flagy == 0) || (flagx == 0 && flagy != 0)) {
      int make;
      if (flagx == 1) make = y;
      if (flagy == 1) make = x;
      printf("1\n%d\n", make);
      continue;
    } else {
      int flag = 0;
      for (i = 0; i < n; i++) {
        if (s.find(a[i] + x + y) != st && (a[i] + x) <= l) {
          printf("1\n%d\n", a[i] + x);
          flag = 1;
          break;
        }
        if (s.find(a[i] + x - y) != st && (a[i] + x) <= l) {
          printf("1\n%d\n", a[i] + x);
          flag = 1;
          break;
        }
        if (s.find(a[i] + y - x) != st && (a[i] + y) <= l) {
          printf("1\n%d\n", a[i] + y);
          flag = 1;
          break;
        }
        if (s.find(a[i] - x + y) != st && (a[i] - x) >= 0) {
          printf("1\n%d\n", a[i] - x);
          flag = 1;
          break;
        }
        if (s.find(a[i] - y + x) != st && (a[i] - y) >= 0) {
          printf("1\n%d\n", a[i] - y);
          flag = 1;
          break;
        }
      }
      if (flag == 0) {
        printf("2\n%d %d\n", x, y);
      }
    }
  }
  return 0;
}
