#include <bits/stdc++.h>
using namespace std;
namespace IN {
char ss[1 << 17], *A = ss, *B = ss;
inline char gc() {
  if (A == B) {
    B = (A = ss) + fread(ss, 1, 1 << 17, stdin);
    if (A == B) return EOF;
  }
  return *A++;
}
template <typename T>
inline void read(T& x) {
  register char c;
  T y;
  for (c = gc(), x = 0, y = 1; c < 48 || 57 < c; c = gc())
    if (c == '-') y = -1;
  for (; 48 <= c && c <= 57; c = gc()) x = ((x + (x << 2)) << 1) + (c ^ '0');
  x *= y;
}
inline int read() {
  register char c;
  int x, y;
  for (c = gc(), x = 0, y = 1; c < 48 || 57 < c; c = gc())
    if (c == '-') y = -1;
  for (; 48 <= c && c <= 57; c = gc()) x = ((x + (x << 2)) << 1) + (c ^ '0');
  return x * y;
}
template <typename T, typename... Args>
inline void read(T& t, Args&... args) {
  read(t);
  read(args...);
}
template <typename T>
inline void gi(T& x) {
  register char c;
  T y;
  for (c = gc(), x = 0, y = 1; c < 48 || 57 < c; c = gc())
    ;
  for (; 48 <= c && c <= 57; c = gc()) x = ((x + (x << 2)) << 1) + (c ^ '0');
  x *= y;
}
inline int gi() {
  register char c;
  int x, y;
  for (c = gc(), x = 0, y = 1; c < 48 || 57 < c; c = gc())
    ;
  for (; 48 <= c && c <= 57; c = gc()) x = ((x + (x << 2)) << 1) + (c ^ '0');
  return x * y;
}
template <typename T, typename... Args>
inline void gi(T& t, Args&... args) {
  gi(t);
  gi(args...);
}
}  // namespace IN
namespace OUT {
char buf[1 << 21], sta[20];
int p1 = 0, p2 = -1;
inline void flush() { fwrite(buf, 1, p2 + 1, stdout), p2 = -1; }
inline void put(char ch) { buf[++p2] = ch; }
inline void put(string ch) {
  int len = ch.size();
  for (int i = 0; i < len; i++) {
    buf[++p2] = ch[i];
  }
}
inline void print(int x) {
  if (x < 0) buf[++p2] = 45, x = -x;
  do {
    sta[++p1] = x % 10 + 48;
  } while (x /= 10);
  for (; p1; p1--) buf[++p2] = sta[p1];
}
inline void print(char ch, int x) {
  if (x < 0) buf[++p2] = 45, x = -x;
  do {
    sta[++p1] = x % 10 + 48;
  } while (x /= 10);
  for (; p1; p1--) buf[++p2] = sta[p1];
  buf[++p2] = ch;
}
template <typename T, typename... Args>
inline void print(char ch, T t, Args... args) {
  print(ch, t);
  print(ch, args...);
}
}  // namespace OUT
using namespace IN;
using namespace OUT;
const int N = 250005, M = 5e5 + 5;
int n, m, k, dep[N], fa[N];
bool leaf[N], vis[N];
vector<int> e[N];
void dfs(int p) {
  leaf[p] = vis[p] = 1;
  for (int i = 0, v; i < e[p].size(); ++i) {
    if (vis[v = e[p][i]]) continue;
    leaf[p] = 0, dep[v] = dep[p] + 1, fa[v] = p, dfs(v);
  }
}
int main() {
  gi(n, m, k);
  for (int i = 1, u, v; i <= m; ++i)
    gi(u, v), e[u].push_back(v), e[v].push_back(u);
  dep[1] = 1, dfs(1);
  int tmp = (n + k - 1) / k;
  for (int i = 1; i <= n; ++i) {
    if (dep[i] >= tmp) {
      put("PATH\n");
      print('\n', dep[i]);
      while (i) {
        print(' ', i);
        i = fa[i];
      }
      flush();
      return 0;
    }
  }
  put("CYCLES\n");
  vector<int> pos;
  for (int i = 1; i <= n && pos.size() < k; ++i)
    if (leaf[i]) pos.push_back(i);
  for (int i = 1, p; i <= k; ++i) {
    bool f = 0;
    p = pos[i - 1];
    for (int j = 0, v; j < e[p].size(); ++j) {
      if ((v = e[p][j]) != fa[p] && (dep[p] - dep[v] + 1) % 3) {
        print('\n', dep[p] - dep[v] + 1), f = 1;
        while (fa[p] != fa[v]) {
          print(' ', p);
          p = fa[p];
        }
        print('\n', p);
        break;
      }
    }
    if (f) continue;
    vector<int> bad;
    for (int j = 0, v; j < e[p].size() && bad.size() < 2; ++j)
      if ((v = e[p][j]) != fa[p]) bad.push_back(v);
    int x = bad[0], y = bad[1];
    if (dep[x] > dep[y]) swap(x, y);
    print('\n', dep[y] - dep[x] + 2);
    print(' ', p);
    while (fa[x] != fa[y]) {
      print(' ', y);
      y = fa[y];
    }
    print('\n', y);
  }
  flush();
}
