#include <bits/stdc++.h>
using namespace std;
const int nmax = 25e4;
bool viz[nmax + 1], instiva[nmax + 1], fii[nmax + 1];
vector<int> g[nmax + 1];
int h[nmax + 1], t[nmax + 1];
vector<int> intorc[nmax + 1];
void dfs(int nod) {
  viz[nod] = 1;
  instiva[nod] = 1;
  fii[nod] = 0;
  for (auto i : g[nod]) {
    if (viz[i] == 0) {
      t[i] = nod;
      fii[nod] = 1;
      h[i] = h[nod] + 1;
      dfs(i);
    } else if (instiva[i] == 1 && i != t[nod]) {
      intorc[nod].push_back(i);
    }
  }
  instiva[nod] = 0;
}
int main() {
  int n, m, k;
  fscanf(stdin, "%d%d%d", &n, &m, &k);
  for (int i = 1; i <= m; ++i) {
    int x, y;
    fscanf(stdin, "%d%d", &x, &y);
    g[x].push_back(y);
    g[y].push_back(x);
  }
  dfs(1);
  for (int i = 1; i <= n; ++i) {
    if (h[i] > (n - 1) / k + 1) {
      fprintf(stdout, "PATH\n%d\n", h[i] + 1);
      int x = i;
      while (x != 0) {
        fprintf(stdout, "%d ", x);
        x = t[x];
      }
      fprintf(stdout, "\n");
      exit(0);
    }
  }
  fprintf(stdout, "CYCLES\n");
  for (int i = 1; i <= n && k > 0; ++i) {
    if (fii[i]) continue;
    --k;
    bool ok = 0;
    for (auto j : intorc[i]) {
      if ((h[i] - h[j] + 1) % 3 != 0) {
        fprintf(stdout, "%d\n", h[i] - h[j] + 1);
        int x = i;
        while (x != j) {
          fprintf(stdout, "%d ", x);
          x = t[x];
        }
        fprintf(stdout, "%d\n", j);
        ok = 1;
        break;
      }
    }
    if (ok == 1) continue;
    int b = intorc[i][0], c = intorc[i][1];
    if (h[b] < h[c]) swap(b, c);
    fprintf(stdout, "%d\n%d ", h[b] - h[c] + 2, i);
    while (b != c) {
      fprintf(stdout, "%d ", b);
      b = t[b];
    }
    fprintf(stdout, "%d\n", c);
  }
  return 0;
}
