#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define mp make_pair #define mt make_tuple #define pb push_back #define rep(i, n) for (int i = 0; i < (n); i++) using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair pii; const int INF = 1 << 29; const double EPS = 1e-9; const int dx[] = {1, 0, -1, 0}, dy[] = {0, -1, 0, 1}; ll N, D, T; vector pos; int main() { cin >> N >> D >> T; pos.resize(N); ll res = 0; for (int i = 0; i < N; i++) { cin >> pos[i]; } sort(pos.begin(), pos.end()); for (int i = 0; i < N; i++) { ll pleft, pright; pleft = pos[i] - D * T; pright = pos[i] + D * T; bool ok = false; for (int j = i + 1; j < N; j++) { ll qleft; qleft = pos[j] - D * T; ll dist = pos[j] - pos[i]; if (pright >= qleft) { if (dist % D == 0) { ok = true; res += dist / D; break; } } else { if (dist % D == 0) { ok = true; res += (T + 1); break; } } } if (!ok) { res += (T + 1); } } // cout << res << endl; reverse(pos.begin(), pos.end()); for (int i = 0; i < N; i++) { ll pleft, pright; // cout << " res = " << res << endl; pleft = pos[i] - D * T; // pright = pos[i] + D * T; bool ok = false; for (int j = i + 1; j < N; j++) { ll qright; qright = pos[j] + D * T; ll dist = abs(pos[j] - pos[i]); if (pleft <= qright) { if (dist % D == 0) { ok = true; // res += dist / D; break; } } else { if (dist % D == 0) { ok = true; res += (T); break; } } } if (!ok) { res += (T); } } cout << res << endl; return 0; }