#include #include #include #include using namespace std; int64_t n, ln; vector times[2]; int64_t ans; void solve_switch(int dir) { vector cur; for (int i = 0; i < 2; ++i) { cur.push_back(0); } int64_t curTime = 0; int64_t curAns = 0; while (cur[0] < times[0].size() || cur[1] < times[1].size()) { if (cur[dir] >= times[dir].size()) { dir = 1 - dir; continue; } int64_t next = max(curTime, times[dir][cur[dir]]); while (cur[dir] < times[dir].size() && times[dir][cur[dir]] <= next) { curAns += max(int64_t(0), next - times[dir][cur[dir]]); cur[dir]++; } curTime = next + ln; dir = 1 - dir; } ans = min(ans, curAns); } void solve_extend(int dir) { vector cur; for (int i = 0; i < 2; ++i) { cur.push_back(0); } int64_t curTime = 0; int64_t curAns = 0; while (cur[0] < times[0].size() || cur[1] < times[1].size()) { if (cur[dir] >= times[dir].size()) { dir = 1 - dir; continue; } int64_t next = max(curTime, times[dir][cur[dir]]); while (cur[dir] < times[dir].size() && times[dir][cur[dir]] <= next) { curAns += max(int64_t(0), next - times[dir][cur[dir]]); cur[dir]++; } while (cur[dir] < times[dir].size() && times[dir][cur[dir]] <= next + ln) { next = times[dir][cur[dir]]; cur[dir]++; } curTime = next + ln; dir = 1 - dir; } ans = min(ans, curAns); } int main() { cin >> n >> ln; for (int i = 0; i < n; ++i) { char c; int64_t t; cin >> c >> t; if (c == 'N') { times[0].push_back(t); } else { times[1].push_back(t); } } ans = std::numeric_limits::max(); for (int dir = 0; dir < 2; ++dir) { solve_switch(dir); solve_extend(dir); } cout << ans << endl; return 0; }