#include <bits/stdc++.h>
using namespace std;
const int INF = (int)2e9;
const long long INFL = (long long)9e18;
const int MAXINT = ((~0) ^ (1 << 31));
const long long MAXLL = ((~0) ^ ((long long)1 << 63));
template <class T>
inline T pow2(T a) {
  return a * a;
}
template <class T>
inline bool mineq(T& a, T b) {
  return (a > b) ? (a = b, true) : false;
}
template <class T>
inline bool maxeq(T& a, T b) {
  return (a < b) ? (a = b, true) : false;
}
const int maxn = 2e5 + 100;
long long n, p;
long long l[maxn], r[maxn], cnt[maxn];
long double pr(int i) {
  return (long double)(r[i] - l[i] + 1 - cnt[i]) / (r[i] - l[i] + 1);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> p;
  for (int i = 0; i < (int)(n); i++) {
    cin >> l[i] >> r[i];
    cnt[i] = (r[i] / p - (l[i] + p - 1) / p + 1);
  }
  long double exp = 0;
  for (int i = 0; i < (int)(n); i++) {
    int j = (i + 1) % n, k = (i + n - 1) % n;
    exp += (1.0 - pr(i) + pr(i) * (1.0 - pr(j)) * (1.0 - pr(k))) * 2000 +
           pr(i) * ((1.0 - pr(k)) * pr(j) + (1.0 - pr(j)) * pr(k)) * 1000;
  }
  cout << setprecision(10) << fixed << exp << endl;
}
