text: #include<bits/stdc++.h>
  // g++ -std=c++17 -Wl,-stack_size -Wl,0x10000000 main.cpp
  #define mt make_tuple
  #define mp make_pair
  #define pu push_back
  #define INF 1000000001
  #define MOD 1000000007
  #define EPS 1e-6
  #define ll long long int
  #define ld long double
  #define fi first
  #define se second
  #define all(v) v.begin(),v.end()
  #define pr(v) { for(int i=0;i<v.size();i++) { v[i]==INF? cout<<"INF " : cout<<v[i]<<" "; } cout<<endl;}
  #define t1(x)                cerr<<#x<<" : "<<x<<endl
  #define t2(x, y)             cerr<<#x<<" : "<<x<<" "<<#y<<" : "<<y<<endl
  #define t3(x, y, z)          cerr<<#x<<" : " <<x<<" "<<#y<<" : "<<y<<" "<<#z<<" : "<<z<<endl
  #define t4(a,b,c,d)          cerr<<#a<<" : "<<a<<" "<<#b<<" : "<<b<<" "<<#c<<" : "<<c<<" "<<#d<<" : "<<d<<endl
  #define t5(a,b,c,d,e)          cerr<<#a<<" : "<<a<<" "<<#b<<" : "<<b<<" "<<#c<<" : "<<c<<" "<<#d<<" : "<<d<<" "<<#e<<" : "<<e<<endl
  #define t6(a,b,c,d,e,f)          cerr<<#a<<" : "<<a<<" "<<#b<<" : "<<b<<" "<<#c<<" : "<<c<<" "<<#d<<" : "<<d<<" "<<#e<<" : "<<e<<" "<<#f<<" : "<<f<<endl
  #define GET_MACRO(_1,_2,_3,_4,_5,_6,NAME,...) NAME
  #define t(...) GET_MACRO(__VA_ARGS__,t6,t5, t4, t3, t2, t1)(__VA_ARGS__)
  #define _ cerr<<"here"<<endl;
  #define __ {ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);}
  
  using namespace std;
  mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
  template<class A, class B> ostream& operator<<(ostream& out, const pair<A, B> &a){ return out<<"("<<a.first<<", "<<a.second<<")";}
  template <int> ostream& operator<<(ostream& os, const vector<int>& v) { os << "["; for (int i = 0; i < v.size(); ++i) { if(v[i]!=INF) os << v[i]; else os << "INF";if (i != v.size() - 1) os << ", "; } os << "]\n"; return os; } 
  template <typename T> ostream& operator<<(ostream& os, const vector<T>& v) { os << "["; for (int i = 0; i < v.size(); ++i) { os << v[i]; ;if (i != v.size() - 1) os << ", "; } os << "]\n"; return os; } 
  
  ll max(ll x, ll y) {return x > y ? x : y;}
  
  ll getClose(int i, vector<int> &v) {
      if(i == 0) {
          if(v[i] == v[i+1]) return 0;
          return v[i+1] - 1;
      }
  
      if(i == v.size() - 2) {
          if(v[v.size() - 2] == v[v.size() - 1]) {
              return 0;
          } else {
              return v.back() - v[v.size() - 2];
          }
      }
      if(v[i+1] == v[i] + 1) return 0;
      return (v[i+1] - (v[i]+1) + 1) / 2;
  }
  
  void solve() {
      int n; 
      ld k;
      cin >> n >> k;
      vector<int> v(n);
      for(int i = 0; i < n; i++) cin >> v[i];
  
      v.pu(1);
      v.pu(k);
  
      sort(v.begin(), v.end());
  
      int m = v.size() - 1;
      // t(v);
  
      ll max1 = 0;
      for(int i = 0; i < m; i++) {
          for(int j = 0; j < m; j++) {
              if(i == j) {
                  ll beg = v[i] + 1;
                  ll end = v[i+1] - 1;
                  max1  = max(max1, max(end - beg + 1, 0));
              } else {
                  int temp = getClose(i, v);
                  temp += getClose(j, v);
                  max1 = max(max1, temp);
              }
          }
      }
  
      cout << fixed << setprecision(12);
      cout << max1 / k << endl;
  
  }
  
  int main() {
      __;
      int t;
      cin >> t;
      for(int h = 1; h <= t; h++) {
          cout << "Case #" << h << ": ";
          solve();
      }
      return 0;
  }
  