#include <bits/stdc++.h>
using namespace std;
vector<pair<double, double> > vec[1001];
map<int, int> mp;
double vis[10000], lefft[10000];
int main() {
  double n, m, w, lst = 0;
  cin >> n >> m >> w;
  double D = (1.0 * n * m) / w;
  for (int i = 0; i < n; i++) vis[i] = m;
  for (int i = 0; i < w; i++) lefft[i] = D;
  for (int i = 0; i < w; i++) {
    for (int j = lst; j < n; j++) {
      if (mp[j] >= 2 || !vis[j]) {
        lst = j + 1;
        continue;
      }
      if (int(lefft[i]) == 0) break;
      if (vis[j] >= lefft[i]) {
        vec[i].push_back({j, lefft[i]});
        vis[j] -= lefft[i];
        lst = j;
        mp[j]++;
        break;
      } else {
        if (!vis[j]) continue;
        vec[i].push_back({j, vis[j]});
        lefft[i] -= vis[j];
        lst = j + 1;
        mp[j]++;
      }
    }
  }
  int T = 0;
  double Sum = 0;
  for (int i = 0; i < w; i++) {
    Sum = 0;
    for (int j = 0; j < vec[i].size(); j++) Sum += vec[i][j].second;
    if (abs(Sum - D) > 1e-9) {
      cout << "NO";
      return 0;
    } else
      T++;
  }
  if (T == w)
    cout << "YES" << endl;
  else {
    cout << "NO" << endl;
    return 0;
  }
  for (int i = 0; i < w; i++, cout << endl)
    for (int j = 0; j < vec[i].size(); j++)
      printf("%.0f %.6f ", vec[i][j].first + 1, vec[i][j].second);
}
