#include <bits/stdc++.h>
using namespace std;
int v[2000007], Next[2000007], head[500007], tot, fa[500007], dep[500007],
    lenth, ans, leaf[500007], n, m, k, cnt;
bool vis[500007];
inline void read(int &x) {
  x = 0;
  char ch = getchar();
  while (ch < '0' || ch > '9') ch = getchar();
  while (ch >= '0' && ch <= '9')
    x = (x << 1) + (x << 3) + (ch ^ 48), ch = getchar();
}
inline void addedge(int x, int y) {
  v[++tot] = y;
  Next[tot] = head[x];
  head[x] = tot;
}
inline void build(int x) {
  int t = 1;
  for (int i = head[x]; i; i = Next[i]) {
    if (vis[v[i]]) continue;
    vis[v[i]] = 1;
    fa[v[i]] = x;
    dep[v[i]] = dep[x] + 1;
    vis[v[i]] = 1;
    if (dep[v[i]] > n / k) {
      lenth = dep[v[i]];
      ans = v[i];
    }
    build(v[i]);
    t = 0;
  }
  if (t) leaf[++cnt] = x;
}
inline void search(int x) {
  int a = 0, b = 0, t = 0;
  for (int i = head[x]; i; i = Next[i]) {
    if (v[i] == fa[x]) continue;
    if (!a || !b) {
      if (!a)
        a = v[i];
      else
        b = v[i];
    }
    if ((dep[x] - dep[v[i]] + 1) % 3) {
      t = 1;
      printf("%d\n", dep[x] - dep[v[i]] + 1);
      for (int j = x; j != fa[v[i]]; j = fa[j]) printf("%d ", j);
      printf("\n");
      break;
    }
  }
  if (t) return;
  if (dep[a] < dep[b]) swap(a, b);
  printf("%d\n", dep[a] - dep[b] + 2);
  printf("%d ", x);
  for (int j = a; j != fa[b]; j = fa[j]) printf("%d ", j);
  printf("\n");
}
int main() {
  int x, y;
  read(n);
  read(m);
  read(k);
  for (int i = 1; i <= m; i++) {
    read(x);
    read(y);
    addedge(x, y);
    addedge(y, x);
  }
  dep[1] = 1;
  vis[1] = 1;
  build(1);
  if (lenth) {
    printf("PATH\n");
    printf("%d\n", lenth);
    for (int i = ans; i; i = fa[i]) printf("%d ", i);
    return 0;
  }
  printf("CYCLES\n");
  for (int i = 1; i <= k; i++) {
    search(leaf[i]);
  }
  return 0;
}
