# Include <cstdio> # include <cstring> # include <algorithm> # include <vector> using namespace std; int a [100010]; int n; bool find (int x) {int l = 0, r = n-1; while (l <= r) {int m = (l + r)> 1; if (a [m] = x) return true; if (a [m] <x) l = m + 1; elser = M-1;} return false;} int OK (int x) {for (int I = 0; I <n; I ++) {if (a [I]> = x) {if (find (a [I]-x )) return I ;}} return-1 ;}bool ok2 () {}int main () {int l, x, y; while (scanf ("% d % D ", & n, & l, & x, & y )! = EOF) {int f1 =-1, f2 =-1; for (int I = 0; I <n; I ++) {scanf ("% d ", & a [I]);} f1 = OK (x); f2 = OK (y); if (f1! =-1 & f2! =-1) {printf ("0 \ n"); continue;} if (f1! =-1 & f2 =-1) {printf ("1 \ n"); printf ("% d \ n", y );} else if (f1 =-1 & f2! =-1) {printf ("1 \ n"); printf ("% d \ n", x);} else {int tmp1 =-1, tmp2 =-1; for (int I = 0; I <n; I ++) {int s = a [I]-x; int e = a [I] + x; if (s> = 0 & s <= l & find (s + y) {tmp1 = I; break ;} if (s> = 0 & s <= l & find (s-y) {tmp1 = I; break ;} if (e> = 0 & e <= l & find (e + y) {tmp2 = I; break ;} if (e> = 0 & e <= l & find (e-y) {tmp2 = I; break ;}} if (tmp1! =-1) {printf ("1 \ n % d \ n", a [tmp1]-x);} else if (tmp2! =-1) {printf ("1 \ n % d \ n", a [tmp2] + x);} else {printf ("2 \ n "); printf ("% d \ n", x, y) ;}} return 0 ;}
CF 479D Long Jumps