#include <bits/stdc++.h>
using LL = long long;
constexpr LL LINF = 334ll << 53;
constexpr int INF = 15 << 26;
constexpr LL MOD = 1E9 + 7;
namespace Problem {
using namespace std;
class Writer {
  static ostringstream oss;

 public:
  template <class T>
  void appendln(const vector<vector<T>>& ans, string spl = " ",
                string el = "\n") {
    for (int i = 0; i < (int)ans.size(); ++i) {
      for (int j = 0; j < (int)ans[i].size(); ++j) {
        oss << ans[i][j];
        oss << (j == (int)ans[i].size() - 1 ? el : spl);
      }
    }
  }
  template <class T>
  void appendln(const vector<T>& ans, string spl = " ") {
    for (int i = 0; i < (int)ans.size(); ++i) {
      oss << ans[i] << (i == (int)ans.size() - 1 ? "\n" : spl);
    }
  }
  template <class T>
  void appendln(const T& answer) {
    oss << answer << "\n";
  }
  template <class T>
  void append(const T& answer) {
    oss << answer;
  }
  void appends(const string spl) {
    oss.seekp((int)oss.tellp() - 1);
    oss << "\n";
  }
  template <class F, class... R>
  void appends(const string spl, const F& fi, const R&... rest) {
    oss << fi << spl;
    appends(spl, rest...);
  }
  static void write() { cout << oss.str(); }
  Writer() {
    static bool is_single = true;
    assert(is_single);
    is_single = false;
  };
};
ostringstream Writer::oss;
class Solver {
 public:
  LL k, d, t;
  double on, off;
  void solve() {
    cin >> k >> d >> t;
    if (d >= k) {
      on = k;
      off = d - k;
    } else {
      LL tmp = (k + d - 1) / d * d;
      on = k;
      off = tmp - k;
    }
    double lb = 1e-12, ub = 2e18;
    while (ub - lb > 1e-10 and (ub - lb) / lb > 1e-10) {
      double mid = (ub + lb) / 2;
      ;
      if (check(mid))
        ub = mid;
      else
        lb = mid;
    }
    cout << fixed << setprecision(20) << ub << "\n";
  }
  bool check(double x) {
    double a, b;
    double loop = floor(x / (on + off));
    a = loop * on;
    b = loop * off;
    double rem = (x / (on + off) - loop) * (on + off);
    a += min(rem, on);
    b += max(rem - on, 0.0);
    return a / t + b / t / 2.0 >= 1.0;
  }
};
}  // namespace Problem
int main() {
  std::cin.tie(0);
  std::ios_base::sync_with_stdio(false);
  Problem::Solver sol;
  sol.solve();
  Problem::Writer::write();
  return 0;
}
