#include <bits/stdc++.h>
using namespace std;
const int maxn = 250005;
int n, m, k, dep[maxn], fa[maxn];
bool leaf[maxn], vis[maxn];
vector<int> e[maxn];
void dfs(int p) {
  leaf[p] = vis[p] = 1;
  for (int i = 0, v; i < e[p].size(); ++i) {
    if (vis[v = e[p][i]]) continue;
    leaf[p] = 0;
    dep[v] = dep[p] + 1;
    fa[v] = p;
    dfs(v);
  }
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1, u, v; i <= m; ++i) {
    scanf("%d%d", &u, &v);
    e[u].push_back(v), e[v].push_back(u);
  }
  dep[1] = 1, dfs(1);
  int tmp = (n + k - 1) / k;
  for (int i = 1; i <= n; ++i) {
    if (dep[i] >= tmp) {
      printf("PATH\n");
      printf("%d\n", dep[i]);
      while (i) {
        printf("%d ", i);
        i = fa[i];
      }
      return 0;
    }
  }
  printf("CYCLES\n");
  vector<int> pos;
  for (int i = 1; i <= n && pos.size() < k; ++i)
    if (leaf[i]) pos.push_back(i);
  for (int i = 1; i <= k; ++i) {
    bool f = 0;
    int p = pos[i - 1];
    for (int j = 0, v; j < e[p].size(); ++j) {
      v = e[p][j];
      if (v != fa[p] && (dep[p] - dep[v] + 1) % 3) {
        printf("%d\n", dep[p] - dep[v] + 1);
        f = 1;
        while (fa[p] != fa[v]) {
          printf("%d ", p);
          p = fa[p];
        }
        printf("%d\n", p);
        break;
      }
    }
    if (f) continue;
    vector<int> bad;
    for (int j = 0, v; j < e[p].size() && bad.size() < 2; ++j)
      if ((v = e[p][j]) != fa[p]) bad.push_back(v);
    int x = bad[0], y = bad[1];
    if (dep[x] > dep[y]) swap(x, y);
    printf("%d\n", dep[y] - dep[x] + 2);
    printf("%d ", p);
    while (fa[x] != fa[y]) {
      printf("%d ", y);
      y = fa[y];
    }
    printf("%d\n", y);
  }
  return 0;
}
