#include <bits/stdc++.h>
using namespace std;
long long get_cnt(long long x, long long y, long long n, long long m,
                  long long r) {
  long long dx1 = r - x;
  long long dx2 = r - (n - x + 1);
  long long tx = r - max(0ll, dx1) - max(0ll, dx2);
  long long dy1 = r - y;
  long long dy2 = r - (m - y + 1);
  long long ty = r - max(0ll, dy1) - max(0ll, dy2);
  return tx * ty;
}
int dx[] = {-1, 0, 1, 0};
int dy[] = {0, 1, 0, -1};
int SZ = 4;
bool in_field(int x, int y, int n, int m) {
  return x >= 1 and y >= 1 and x <= n and y <= m;
}
int main() {
  long double n, m;
  cin >> n >> m;
  long double r, k;
  cin >> r >> k;
  set<pair<int, int>> was;
  set<pair<long long, pair<int, int>>> q;
  q.insert(
      {get_cnt((n + 1) / 2, (m + 1) / 2, n, m, r), {(n + 1) / 2, (m + 1) / 2}});
  long double cnt = 0;
  while (k > 0) {
    auto it = q.end();
    --it;
    auto t = *it;
    cnt += t.first;
    q.erase(it);
    was.insert(t.second);
    int x = t.second.first;
    int y = t.second.second;
    for (int i = 0; i < SZ; ++i) {
      int nx = x + dx[i];
      int ny = y + dy[i];
      if (in_field(nx, ny, n, m) and !was.count({nx, ny})) {
        q.insert({get_cnt(nx, ny, n, m, r), {nx, ny}});
      }
    }
    --k;
  }
  long double ans = cnt / ((n - r + 1) * (m - r + 1));
  cout << setprecision(32) << ans << endl;
}
