#include <bits/stdc++.h>
using namespace std;
char buf[1 << 20], *p1, *p2;
template <typename T>
inline void read(T &t) {
  int v =
      (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 20, stdin), p1 == p2)
           ? EOF
           : *p1++);
  T f = 1;
  t = 0;
  while (!isdigit(v)) {
    if (v == '-') f = -1;
    v = (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 20, stdin), p1 == p2)
             ? EOF
             : *p1++);
  }
  while (isdigit(v)) {
    t = t * 10 + v - 48;
    v = (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 20, stdin), p1 == p2)
             ? EOF
             : *p1++);
  }
  t *= f;
}
template <typename T, typename... Args>
inline void read(T &t, Args &...args) {
  read(t);
  read(args...);
}
const int N = 3e5 + 10;
vector<int> G[N], leaf;
int n, m, k, d, fa[N], pos, dep[N];
bool vis[N];
void dfs(int x, int fat, int de) {
  vis[x] = 1;
  dep[x] = de;
  if (de > d) {
    d = de;
    pos = x;
  }
  fa[x] = fat;
  bool flag = 0;
  for (auto y : G[x]) {
    if (y != fat && !vis[y]) {
      flag = 1;
      dfs(y, x, de + 1);
    }
  }
  if (!flag) leaf.push_back(x);
}
signed main() {
  read(n, m, k);
  for (int i = 1; i <= m; ++i) {
    int x, y;
    read(x, y);
    G[x].push_back(y);
    G[y].push_back(x);
  }
  dfs(1, 0, 1);
  if (d >= n / k) {
    puts("PATH");
    printf("%d\n", d);
    for (int i = 1, x = pos; i <= d; ++i) {
      printf("%d ", x);
      x = fa[x];
    }
  } else if (leaf.size() >= k) {
    puts("CYCLES");
    for (int i = 0; i < k; ++i) {
      int x = leaf[i], y = -1, z = -1;
      for (auto p : G[x]) {
        if (p != fa[x]) {
          if (y == -1)
            y = p;
          else if (z == -1)
            z = p;
        }
      }
      int del = dep[x] - dep[y] + 1;
      if (del % 3) {
        printf("%d\n", del);
        while (x != y) printf("%d ", x), x = fa[x];
        printf("%d\n", y);
        continue;
      }
      del = dep[x] - dep[z] + 1;
      if (del % 3) {
        printf("%d\n", del);
        while (x != z) printf("%d ", x), x = fa[x];
        printf("%d\n", z);
        continue;
      }
      if (dep[y] < dep[z]) swap(y, z);
      del = dep[y] - dep[z] + 2;
      printf("%d\n", del);
      while (y != z) printf("%d ", y), y = fa[y];
      printf("%d %d\n", z, x);
      continue;
    }
  } else {
    puts("-1");
  }
  return 0;
}
