#include <bits/stdc++.h>
using namespace std;
const int MaxN(300003);
int Deep[MaxN], fa[MaxN];
bool Vis1[MaxN], Vis2[MaxN], leaf[MaxN];
vector<int> G[MaxN], Pre[MaxN];
void dfs(int u) {
  leaf[u] = Vis1[u] = true;
  for (auto v : G[u])
    if (!Vis1[v]) {
      Deep[v] = Deep[u] + 1;
      fa[v] = u, dfs(v);
      leaf[u] = false;
    } else if (!Vis2[v] && v != fa[u])
      Pre[u].push_back(v);
  Vis2[u] = true;
}
int main() {
  int n, m, k;
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1, u, v; i <= m; i++) {
    scanf("%d%d", &u, &v);
    G[u].push_back(v);
    G[v].push_back(u);
  }
  Deep[1] = 1, dfs(1);
  int tmp = (n - 1) / k + 1;
  for (int i = 1; i <= n; i++)
    if (Deep[i] >= tmp) {
      printf("PATH\n%d\n", Deep[i]);
      for (int j = i; j; j = fa[j]) printf("%d%c", j, " \n"[j == 1]);
      return 0;
    }
  puts("CYCLES");
  for (int i = 1; i <= n; i++)
    if (leaf[i]) {
      int f1 = Pre[i][0], f2 = Pre[i][1];
      if ((Deep[i] - Deep[f1] + 1) % 3) {
        printf("%d\n", Deep[i] - Deep[f1] + 1);
        for (int j = i; j ^ f1; j = fa[j]) printf("%d ", j);
        printf("%d\n", f1);
      } else if ((Deep[i] - Deep[f2] + 1) % 3) {
        printf("%d\n", Deep[i] - Deep[f2] + 1);
        for (int j = i; j ^ f2; j = fa[j]) printf("%d ", j);
        printf("%d\n", f2);
      } else {
        if (Deep[f1] < Deep[f2]) swap(f1, f2);
        printf("%d\n", Deep[f1] - Deep[f2] + 2);
        for (int j = f1; j ^ f2; j = fa[j]) printf("%d ", j);
        printf("%d %d\n", f2, i);
      }
      if (!--k) break;
    }
  return 0;
}
