#include <bits/stdc++.h>
using namespace std;
const double EPSILON = 1e-7;
struct Vector {
  double x, y;
  Vector() : x(0), y(0) {}
  Vector(double pX, double pY) : x(pX), y(pY) {}
  void read() { scanf("%lf %lf", &x, &y); }
  void print() { printf("(%lf, %lf) ", x, y); }
  inline double get_len() { return sqrt(x * x + y * y); }
  void norm() {
    double len = get_len();
    x /= len;
    y /= len;
  }
};
Vector operator-(Vector a) { return Vector(-a.x, -a.y); }
Vector operator+(Vector a, Vector b) { return Vector(a.x + b.x, a.y + b.y); }
Vector operator-(Vector a, Vector b) { return a + (-b); }
Vector operator*(Vector a, double s) { return Vector(a.x * s, a.y * s); }
int maxSpeed;
Vector start, dest;
Vector wind1, wind2;
double windT;
void input() {
  start.read();
  dest.read();
  scanf("%i %lf", &maxSpeed, &windT);
  wind1.read();
  wind2.read();
}
bool possib(double time) {
  Vector curWind1 = wind1 * min(time, windT);
  Vector curWind2 = wind2 * max(time - windT, (double)0);
  Vector strPos = start + curWind1 + curWind2;
  Vector path = dest - strPos;
  double neededTime = path.get_len() / maxSpeed;
  return (neededTime < time);
}
int main() {
  input();
  double high = 1e13L;
  double low = 0;
  while (high - low > EPSILON) {
    double med = (high + low) * 0.5;
    if (possib(med)) {
      high = med;
    } else {
      low = med;
    }
  }
  printf("%.6lf\n", high);
}
