#include <bits/stdc++.h>
using namespace std;
static const double EPS = 1e-8;
static const int INF = (int)1e8;
int main(void) {
  int n, w, m;
  cin >> n >> w >> m;
  vector<pair<int, double> > ans[m];
  if (0) {
    for (int i = 0; i < (int)(n); ++i) {
      for (int j = 0; j < (int)(m); ++j) {
        ans[j].push_back(pair<int, double>(i + 1, (double)w / m));
      }
    }
    cout << "YES" << endl;
    for (int i = 0; i < (int)(m); ++i) {
      for (int j = 0; j < (int)(ans[i].size()); ++j) {
        if (j) cout << " ";
        printf("%d %.6lf", ans[i][j].first, ans[i][j].second);
      }
      cout << endl;
    }
  } else if (2 * n < m) {
    cout << "NO" << endl;
  } else if (1) {
    int data[100] = {};
    int idx = 0;
    bool able = true;
    for (int i = 0; i < (int)(n); ++i) {
      if (idx >= m) {
        able = false;
        break;
      }
      int water = m;
      while (data[idx] == n) idx++;
      if (water - (n - data[idx]) >= 0) {
        ans[idx].push_back(
            pair<int, double>(i + 1, (double)(n - data[idx]) / m * w));
        water -= (n - data[idx]);
        data[idx] = n;
        idx++;
      } else {
        ans[idx].push_back(pair<int, double>(i + 1, w));
        water = 0;
        data[idx] += m;
      }
      if (idx >= m && water) {
        able = false;
        break;
      }
      if (water) {
        ans[idx].push_back(pair<int, double>(i + 1, (double)(water) / m * w));
        data[idx] += water;
        if (data[idx] > n) {
          able = false;
          break;
        }
      }
    }
    if (able) {
      cout << "YES" << endl;
      for (int i = 0; i < (int)(m); ++i) {
        for (int j = 0; j < (int)(ans[i].size()); ++j) {
          if (j) cout << " ";
          printf("%d %.6lf", ans[i][j].first, ans[i][j].second);
        }
        cout << endl;
      }
    } else {
      cout << "NO" << endl;
    }
  }
  return 0;
}
