#include <bits/stdc++.h>
using namespace std;
using namespace chrono;
const int N = 250005;
vector<int> G[N], leaf;
int n, k, dep[N], par[N], ans;
void dfs(int d, int u, int p) {
  dep[u] = d;
  par[u] = p;
  if (d >= n / k) ans = 1;
  int c = 0;
  for (auto v : G[u]) {
    if (dep[v]) continue;
    dfs(d + 1, v, u);
    c++;
  }
  if (!c) leaf.push_back(u);
}
int main() {
  time_point<steady_clock> start = steady_clock::now();
  int m, u, v;
  scanf("%d%d%d", &n, &m, &k);
  while (m--) {
    scanf("%d%d", &u, &v);
    G[u].push_back(v);
    G[v].push_back(u);
  }
  dfs(1, 1, 0);
  if (ans) {
    ans = leaf[0];
    for (auto u : leaf)
      if (dep[u] > dep[ans]) ans = u;
    printf("PATH\n%d\n", dep[ans]);
    while (ans) {
      printf("%d ", ans);
      ans = par[ans];
    }
  } else {
    printf("CYCLES\n");
    for (int i = 0; i < k; i++) {
      int x = leaf[i];
      u = v = 0;
      for (int j = 0; j < G[x].size(); j++) {
        if (G[x][j] != par[x]) {
          if (!u)
            u = G[x][j];
          else if (G[x][j] != u) {
            v = G[x][j];
            break;
          }
        }
      }
      if (dep[u] < dep[v]) swap(u, v);
      if ((dep[x] - dep[u] + 1) % 3) {
        printf("%d\n", dep[x] - dep[u] + 1);
        while (x != u) {
          printf("%d ", x);
          x = par[x];
        }
        printf("%d\n", u);
      } else if ((dep[x] - dep[v] + 1) % 3) {
        printf("%d\n", dep[x] - dep[v] + 1);
        while (x != v) {
          printf("%d ", x);
          x = par[x];
        }
        printf("%d\n", v);
      } else {
        printf("%d\n%d ", dep[u] - dep[v] + 2, x);
        while (u != v) {
          printf("%d ", u);
          u = par[u];
        }
        printf("%d\n", v);
      }
    }
  }
  cerr << endl
       << "------------------------------" << endl
       << "Time: "
       << duration<double, milli>(steady_clock::now() - start).count() << " ms."
       << endl;
  return 0;
}
