#include <bits/stdc++.h>
using namespace std;
const int N = 2e6;
vector<int> g[N];
bool vis[N];
int f[N], dep[N], deg[N];
int n, m, k;
void dfs(int u, int fa) {
  dep[u] = dep[fa] + 1;
  f[u] = fa;
  vis[u] = true;
  if (dep[u] * k >= n) {
    printf("PATH\n");
    printf("%d\n", dep[u]);
    for (; u; u = f[u]) {
      printf("%d ", u);
    }
    exit(0);
  }
  for (int v : g[u]) {
    if (v == fa || vis[v]) continue;
    dfs(v, u);
  }
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  while (m--) {
    int u, v;
    scanf("%d%d", &u, &v);
    g[u].push_back(v);
    g[v].push_back(u);
  }
  dfs(1, 0);
  for (int i = 1; i <= n; i++) {
    deg[f[i]]++;
  }
  vector<int> leaf;
  for (int i = 1; i <= n; i++) {
    if (deg[i] == 0) {
      leaf.push_back(i);
    }
  }
  memset(vis, 0, sizeof(vis));
  printf("CYCLES\n");
  for (auto i : leaf) {
    bool flag = true;
    for (int a = 0; a < 3 && flag; a++) {
      for (int b = 0; b < 3 && flag; b++) {
        int u = g[i][a], v = g[i][b];
        int l = dep[u] - dep[v] + 2;
        if (dep[u] <= dep[v] || l % 3 == 0) continue;
        printf("%d\n", dep[u] - dep[v] + 2);
        printf("%d ", i);
        for (u; u != v; u = f[u]) {
          vis[u] = true;
          printf("%d ", u);
        }
        vis[v] = vis[i] = true;
        printf("%d\n", v);
        flag = false;
        k--;
      }
    }
    if (!k) break;
  }
}
