#include <bits/stdc++.h>
using namespace std;
const int maxN = 250042;
vector<int> G[maxN];
int d[maxN], f[maxN];
bool lf[maxN];
void dfs(int v) {
  lf[v] = true;
  for (int u : G[v])
    if (d[u] == 0) {
      d[u] = d[v] + 1;
      f[u] = v;
      dfs(u);
      lf[v] = false;
    }
}
void print_path(int v, int k) {
  for (; k--; v = f[v]) printf("%d ", v);
  printf("\n");
}
int main() {
  int n, m, k;
  scanf("%d%d%d", &n, &m, &k);
  while (m--) {
    int a, b;
    scanf("%d%d", &a, &b);
    G[a].push_back(b);
    G[b].push_back(a);
  }
  d[1] = 1;
  dfs(1);
  for (int v = (1); (v) < (n + 1); (v)++) {
    if (d[v] < (n + k - 1) / k) continue;
    printf("PATH\n%d\n", d[v]);
    print_path(v, d[v]);
    return 0;
  }
  printf("CYCLES\n");
  for (int v = 1; k != 0; v++) {
    if (!lf[v]) continue;
    int u = G[v][0], w = G[v].back();
    if (u == f[v]) u = G[v][1];
    if (w == f[v]) w = G[v][1];
    if (d[u] < d[w]) swap(u, w);
    int a = d[v] - d[u] + 1;
    int b = d[v] - d[w] + 1;
    int c = d[u] - d[w] + 2;
    if (a % 3 != 0) {
      printf("%d\n", a);
      print_path(v, a);
    } else if (b % 3 != 0) {
      printf("%d\n", b);
      print_path(v, b);
    } else {
      printf("%d\n%d ", c, v);
      print_path(u, c - 1);
    }
    k--;
  }
  return 0;
}
