#include <bits/stdc++.h>
#pragma warning(disable : 4996)
#pragma comment(linker, "/STACK:336777216")
using namespace std;
int IT_MAX = 1 << 19;
const long long MOD = 1000000007;
const int INF = 0x3f3f3f3f;
const long long LL_INF = 0x1f3f3f3f3f3f3f3f;
const double PI = acos(-1);
const double ERR = 1e-12;
long long in[100050];
int main() {
  long long N, M, A, D, i, j;
  scanf("%lld %lld %lld %lld", &N, &M, &A, &D);
  for (i = 1; i <= M; i++) scanf("%lld", &in[i]);
  long long c = D / A + 1;
  long long ans = 0, p1 = 0, p2 = 0;
  while (p1 != N || p2 != M) {
    if (p1 != N && (p2 == M || (p1 + 1) * A < in[p2 + 1])) {
      long long x = min(N + 1, (in[p2 + 1] + A - 1) / A) - (p1 + 1);
      if (p2 == M) x = N - p1;
      long long c2 = (x + c - 1) / c;
      long long s = (p1 + 1) * A, e = s + c * (c2 - 1) * A + D;
      p2 = lower_bound(in + 1, in + M + 1, e + 1) - (in + 1);
      p1 = min(N, e / A);
      ans += c2;
    } else {
      ans++;
      long long s = in[p2 + 1], e = s + D;
      p2 = lower_bound(in + 1, in + M + 1, e + 1) - (in + 1);
      p1 = min(N, e / A);
    }
  }
  return !printf("%lld\n", ans);
}
