#include <bits/stdc++.h>
template <typename Tp>
void in(Tp &x) {
  char ch = getchar(), f = 1;
  x = 0;
  while (ch != '-' && (ch < '0' || ch > '9')) ch = getchar();
  if (ch == '-') f = -1, ch = getchar();
  while (ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
  x *= f;
}
template <typename Tp>
bool chkmax(Tp &x, Tp y) {
  return x >= y ? 0 : (x = y, 1);
}
template <typename Tp>
bool chkmin(Tp &x, Tp y) {
  return x <= y ? 0 : (x = y, 1);
}
template <typename Tp>
Tp Max(const Tp &x, const Tp &y) {
  return x > y ? x : y;
}
template <typename Tp>
Tp Min(const Tp &x, const Tp &y) {
  return x < y ? x : y;
}
const unsigned long long MAXN = 100010;
unsigned long long n, a, m, d;
unsigned long long times[MAXN];
int main() {
  in(n);
  in(m);
  in(a);
  in(d);
  for (unsigned long long i = (1), i_END_ = (m); i <= i_END_; ++i) in(times[i]);
  unsigned long long term = d / a + 1;
  unsigned long long nowt = 0;
  unsigned long long cnt = 1;
  unsigned long long ans = 0;
  while (true) {
    while (cnt <= m && times[cnt] <= nowt) cnt++;
    unsigned long long nxta = (nowt / a + 1) * a;
    if (nowt / a >= n && cnt == m + 1) break;
    if ((nowt / a >= n || nxta >= times[cnt]) && cnt != m + 1) {
      ans++;
      nowt = times[cnt] + d;
      continue;
    } else {
      unsigned long long sum;
      if (cnt == m + 1) {
        sum = ((n * a - nxta) / a) / term + 1;
        ans += sum;
        nowt = nxta + term * (sum - 1) * a + d;
        break;
      }
      sum = ((Min(times[cnt] - 1, n * a) - nxta) / a) / term + 1;
      ans += sum;
      nowt = nxta + term * (sum - 1) * a + d;
    }
  }
  printf("%lld\n", ans);
  return 0;
}
