#include <bits/stdc++.h>
const int MAXN = 3e5 + 10;
int n, m, k;
std::vector<int> G[MAXN];
int depth[MAXN];
int fa[MAXN];
int vis[MAXN];
int lf[MAXN];
void dfs(int u) {
  vis[u] = lf[u] = 1;
  depth[u] = depth[fa[u]] + 1;
  for (auto v : G[u]) {
    if (!vis[v]) {
      lf[u] = 0;
      fa[v] = u;
      dfs(v);
    }
  }
}
void solve() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 0, x, y; i < m; ++i) {
    scanf("%d%d", &x, &y);
    G[x].push_back(y), G[y].push_back(x);
  }
  dfs(1);
  int x = 1;
  for (int i = 1; i <= n; ++i)
    if (depth[i] > depth[x]) x = i;
  if (depth[x] * k >= n) {
    std::vector<int> ans;
    printf("PATH\n%d\n", depth[x]);
    while (x) printf("%d ", x), x = fa[x];
  } else {
    puts("CYCLES");
    int cnt = 0;
    for (int i = 1; i <= n && cnt < k; ++i) {
      int v = i;
      if (!lf[v]) continue;
      std::vector<int> vs;
      for (auto u : G[v])
        if (u != fa[v]) vs.push_back(u);
      int x = vs[0], y = vs[1];
      if ((depth[v] - depth[x] + 1) % 3 != 0) {
        printf("%d\n", depth[v] - depth[x] + 1);
        while (v != fa[x]) printf("%d ", v), v = fa[v];
        puts("");
        cnt++;
        continue;
      }
      if ((depth[v] - depth[y] + 1) % 3 != 0) {
        printf("%d\n", depth[v] - depth[y] + 1);
        while (v != fa[y]) printf("%d ", v), v = fa[v];
        puts("");
        cnt++;
        continue;
      }
      if (depth[x] < depth[y]) std::swap(x, y);
      printf("%d\n", depth[x] - depth[y] + 2);
      printf("%d ", v);
      while (x != fa[y]) printf("%d ", x), x = fa[x];
      puts("");
      cnt++;
    }
  }
}
int main() {
  solve();
  return 0;
}
