#include <bits/stdc++.h>
using namespace std;
const long long N = 1e5 + 2;
const long long N1 = 1e2 + 2;
const long long mod = 1e9 + 7;
const int MASK = 1 << 17 + 1;
const int who = 6 * N * log2(N);
long long power(long long a, long long b, long long c) {
  long long ret = 1;
  while (b) {
    if (b % 2 == 1) {
      ret = (ret * a) % c;
    }
    b /= 2;
    a = (a * a) % c;
  }
  return ret;
}
long long n, m, r, val;
long long a[N + 3], b[N + 3];
map<long long, long long> vis[N + 3];
vector<double> v;
bool calc(long long x, long long y) {
  if (x < n && y < m && x >= 0 && y >= 0) {
    if (vis[x][y] == 0) {
      return true;
    }
  }
  return false;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> n >> m >> r >> val;
  long long tot = n - r + 1;
  for (int i = 0; i < n; i++) {
    int sum = max(0, (int)(n - r - i)) + max(0, (int)(i - r + 1));
    a[i] = tot - sum;
  }
  tot = m - r + 1;
  for (int i = 0; i < m; i++) {
    int sum = max(0, (int)(m - r - i)) + max(0, (int)(i - r + 1));
    b[i] = tot - sum;
  }
  priority_queue<pair<double, pair<int, int> > > pq;
  long long x = n / 2, y = m / 2;
  vis[x][y] = 1;
  pq.push(make_pair(a[x] * b[y], make_pair(x, y)));
  while (!pq.empty() && v.size() < val) {
    pair<double, pair<int, int> > tm = pq.top();
    pq.pop();
    v.push_back(tm.first);
    long long test;
    if (calc(tm.second.first - 1, tm.second.second + 0)) {
      test = a[(tm.second.first - 1)] * b[(tm.second.second)];
      vis[tm.second.first - 1][tm.second.second] = 1;
      pq.push(
          make_pair(test, make_pair(tm.second.first - 1, tm.second.second)));
    }
    if (calc(tm.second.first + 0, tm.second.second + 1)) {
      test = a[(tm.second.first)] * b[(tm.second.second + 1)];
      vis[tm.second.first][tm.second.second + 1] = 1;
      pq.push(
          make_pair(test, make_pair(tm.second.first, tm.second.second + 1)));
    }
    if (calc(tm.second.first + 0, tm.second.second - 1)) {
      vis[tm.second.first][tm.second.second - 1] = 1;
      test = a[(tm.second.first)] * b[(tm.second.second - 1)];
      pq.push(
          make_pair(test, make_pair(tm.second.first, tm.second.second - 1)));
    }
    if (calc(tm.second.first + 1, tm.second.second + 0)) {
      vis[tm.second.first + 1][tm.second.second] = 1;
      test = a[(tm.second.first + 1)] * b[(tm.second.second)];
      pq.push(
          make_pair(test, make_pair(tm.second.first + 1, tm.second.second)));
    }
  }
  double res = 0, res1 = (n - r + 1) * (m - r + 1);
  for (auto it : v) {
    res += it;
  }
  printf("%.15lf\n", res / res1);
}
