#include <bits/stdc++.h>
using namespace std;
const int N = 250025;
const int M = 1e6 + 10;
int n, m, k, w0, w1, tot;
int u[M], nex[M], a[5];
int h[N], b[N], deep[N], fa[N];
void addedge(int w0, int w1) {
  u[++tot] = w1;
  nex[tot] = h[w0];
  h[w0] = tot;
}
void dfs(int w, int depth) {
  if (depth > w1) w0 = w;
  deep[w] = depth;
  bool leaf = true;
  for (int i = h[w]; i; i = nex[i])
    if (!deep[u[i]]) {
      fa[u[i]] = w;
      dfs(u[i], depth + 1);
      leaf = false;
    }
  if (leaf) b[tot++] = w;
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  while (m--) {
    scanf("%d%d", &w0, &w1);
    addedge(w0, w1);
    addedge(w1, w0);
  }
  w1 = n / k;
  w0 = tot = 0;
  fa[1] = 1;
  dfs(1, 1);
  if (w0) {
    printf("PATH\n%d\n", deep[w0]);
    for (; w0 != 1; w0 = fa[w0]) printf("%d ", w0);
    printf("1\n");
  } else {
    printf("CYCLES\n");
    for (int i = 0; i < k; i++) {
      int j = h[w0 = b[i]];
      tot = 0;
      for (int cnt = 3; cnt; j = nex[j], cnt--)
        if (u[j] != fa[w0]) a[tot++] = u[j];
      if ((deep[w0] - deep[a[0]] + 1) % 3 != 0) {
        printf("%d\n", deep[w0] - deep[a[0]] + 1);
        for (; w0 != a[0]; w0 = fa[w0]) printf("%d ", w0);
        printf("%d\n", a[0]);
      } else if ((deep[w0] - deep[a[1]] + 1) % 3 != 0) {
        printf("%d\n", deep[w0] - deep[a[1]] + 1);
        for (; w0 != a[1]; w0 = fa[w0]) printf("%d ", w0);
        printf("%d\n", a[1]);
      } else {
        if (deep[a[0]] < deep[a[1]]) swap(a[0], a[1]);
        printf("%d\n", deep[a[0]] - deep[a[1]] + 2);
        printf("%d ", w0);
        for (w0 = a[0]; w0 != a[1]; w0 = fa[w0]) printf("%d ", w0);
        printf("%d\n", a[1]);
      }
    }
  }
  return 0;
}
