#include <bits/stdc++.h>
using namespace std;
int n, pos[200001];
bool doable(int d) {
  int f = 0, s = 1;
  while (s < n && pos[s] - pos[f] <= 2 * d) ++s;
  if (s >= n) return true;
  f = s;
  s = f + 1;
  while (s < n && pos[s] - pos[f] <= 2 * d) ++s;
  if (s >= n) return true;
  f = s;
  s = f + 1;
  while (s < n && pos[s] - pos[f] <= 2 * d) ++s;
  if (s >= n) return true;
  return false;
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; ++i) {
    scanf("%d", &pos[i]);
    pos[i] *= 2;
  }
  sort(pos, pos + n);
  int left = 0, right = 2000000000;
  int can = -1;
  while (left <= right) {
    int dis = (left + right) / 2;
    if (doable(dis)) {
      right = dis - 1;
      can = dis;
    } else {
      left = dis + 1;
    }
  }
  double d = can * 0.5;
  printf("%.6f\n", d);
  for (int i = 0; i < n; ++i) pos[i] /= 2;
  int f = 0;
  int s = f + 1;
  while (s < n && pos[s] - pos[f] <= can) ++s;
  printf("%.6f ", pos[f] + d);
  f = s;
  s = f + 1;
  while (s < n && pos[s] - pos[f] <= can) ++s;
  if (f == n) f = n - 1;
  printf("%.6f ", pos[f] + d);
  f = s;
  s = f + 1;
  while (s < n && pos[s] - pos[f] <= can) ++s;
  if (f == n) f = n - 1;
  printf("%.6f\n", pos[f] + d);
  return 0;
}
