#include <bits/stdc++.h>
using namespace std;
int n, m, k;
int edge[1000005], head[1000005], nextt[1000005], tot;
int d[1000005], pre[1000005];
int leaf[1000005], cnt;
void add(int x, int y) {
  edge[++tot] = y;
  nextt[tot] = head[x];
  head[x] = tot;
}
void dfs(int x) {
  int h1 = 0, h2 = 0;
  for (int i = head[x]; i; i = nextt[i]) {
    h1++;
    int y = edge[i];
    if (d[y]) {
      h2++;
      continue;
    }
    pre[y] = x;
    d[y] = d[x] + 1;
    dfs(y);
  }
  if (h1 == h2) leaf[++cnt] = x;
}
void print(int x, int z) {
  printf("%d ", x);
  if (pre[x] != z) print(pre[x], z);
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1; i <= m; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    add(x, y);
    add(y, x);
  }
  d[1] = 1;
  dfs(1);
  for (int i = 1; i <= n; i++) {
    if (d[i] >= ceil(double(n) / double(k))) {
      printf("PATH\n");
      printf("%d\n", d[i]);
      print(i, 0);
      return 0;
    }
  }
  printf("CYCLES\n");
  sort(leaf + 1, leaf + cnt + 1);
  for (int z = 1; z <= k; z++) {
    int x = leaf[z];
    int t[3];
    bool flag = false;
    for (int i = head[x], j = 0; i && j <= 2; i = nextt[i]) {
      int y = edge[i];
      if (y == pre[x]) continue;
      j++;
      if (j <= 2) t[j] = y;
      int len = d[x] - d[y] + 1;
      if (len % 3 != 0) {
        printf("%d\n", len);
        print(x, pre[y]);
        printf("\n");
        flag = true;
        break;
      }
    }
    if (!flag) {
      if (d[t[1]] > d[t[2]]) swap(t[1], t[2]);
      printf("%d\n", d[t[2]] - d[t[1]] + 2);
      printf("%d ", x);
      print(t[2], pre[t[1]]);
      printf("\n");
    }
  }
  return 0;
}
