#include <bits/stdc++.h>
using namespace std;
namespace zyywzw {
const int N = 3e5 + 100;
const int M = 5e5 + 100;
int n, m, x, y, k;
int head[N], tot;
struct edge {
  int to, nxt;
} G[M << 1];
int leaf[N], ltot, nle[N];
int fa[N], dep[N], vis[N];
template <class T>
inline void read(T &x) {
  T res = 0, f = 1;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    res = res * 10 + c - '0';
    c = getchar();
  }
  x = f * res;
}
template <class T>
inline void write(T x, int flag = 0) {
  int chk = 0;
  if (!x) chk = 1;
  if (x < 0) {
    putchar('-');
    x = -x;
  }
  char buff[30];
  int top = 0;
  while (x) {
    buff[++top] = x % 10 + '0';
    x /= 10;
  }
  while (top) {
    putchar(buff[top--]);
  }
  if (chk) putchar('0');
  if (flag == 1) puts("");
  if (flag == 2) putchar(' ');
  if (flag == 3) putchar('*');
}
inline void add(int x, int y) {
  G[++tot] = (edge){y, head[x]};
  head[x] = tot;
}
inline void dfs(int u) {
  vis[u] = 1;
  if (dep[u] >= (n + k - 1) / k) {
    puts("PATH");
    write(dep[u], 1);
    int x = u;
    while (x) {
      write(x, 2);
      x = fa[x];
    }
    exit(0);
  }
  for (register int i = head[u]; i; i = G[i].nxt) {
    int v = G[i].to;
    if (vis[v]) continue;
    fa[v] = u;
    dep[v] = dep[u] + 1;
    dfs(v), nle[u] = 1;
  }
  if (!nle[u]) leaf[++ltot] = u;
}
int main() {
  read(n);
  read(m);
  read(k);
  for (register int i(1); i <= m; i++) {
    read(x);
    read(y);
    add(x, y);
    add(y, x);
  }
  fa[1] = 0;
  dep[1] = 1;
  dfs(1);
  puts("CYCLES");
  int ctot = 0;
  for (register int i(1); i <= ltot; i++) {
    if (ctot == k) return 0;
    ctot++;
    int u = leaf[i];
    x = y = 0;
    for (register int i = head[u]; i; i = G[i].nxt) {
      int v = G[i].to;
      if (v == fa[u]) continue;
      if (!x)
        x = v;
      else
        y = v;
    }
    if (dep[x] > dep[y]) swap(x, y);
    if ((dep[u] - dep[x] + 1) % 3) {
      write(dep[u] - dep[x] + 1, 1);
      while (u != x) {
        write(u, 2);
        u = fa[u];
      }
      write(u, 1);
      continue;
    }
    if ((dep[u] - dep[y] + 1) % 3) {
      write(dep[u] - dep[y] + 1, 1);
      while (u != y) {
        write(u, 2);
        u = fa[u];
      }
      write(u, 1);
      continue;
    }
    write(dep[y] - dep[x] + 2, 1);
    write(u, 2);
    u = y;
    while (u != x) {
      write(u, 2);
      u = fa[u];
    }
    write(u, 1);
  }
  return 0;
}
}  // namespace zyywzw
int main() { zyywzw::main(); }
