#include <bits/stdc++.h>
using namespace std;
const int MX = 250005;
vector<int> neigh[MX];
int depth[MX];
int par[MX];
bool vis[MX];
bool isRepr[MX];
void dfs(int v, int p, int d) {
  vis[v] = true;
  depth[v] = d;
  par[v] = p;
  bool leaf = true;
  for (int u : neigh[v]) {
    if (u == p) continue;
    if (vis[u]) continue;
    dfs(u, v, d + 1);
    leaf = false;
  }
  if (leaf) isRepr[v] = true;
}
bool comp(int a, int b) { return depth[a] < depth[b]; }
int main() {
  int n, m, k;
  ignore = scanf("%d %d %d", &n, &m, &k);
  for (int i = 0; i < m; i++) {
    int u, v;
    ignore = scanf("%d %d", &u, &v);
    neigh[u].push_back(v);
    neigh[v].push_back(u);
  }
  dfs(1, 0, 1);
  for (int v = 1; v <= n; v++) {
    if (depth[v] * 1LL * k >= n) {
      printf("PATH\n");
      printf("%d\n", depth[v]);
      while (true) {
        printf("%d ", v);
        if (v == 1) return 0;
        v = par[v];
      }
    }
  }
  printf("CYCLES\n");
  for (int v = 1; v <= n && k > 0; v++) {
    if (!isRepr[v]) continue;
    vector<int> H;
    H.push_back(neigh[v][0]);
    H.push_back(neigh[v][1]);
    H.push_back(neigh[v][2]);
    sort(H.begin(), H.end(), comp);
    int x = -1, y = -1;
    for (int i = 0; i < 3; i++) {
      for (int j = i + 1; j < 3; j++) {
        if ((depth[H[j]] - depth[H[i]] + 2) % 3 != 0) {
          x = H[i];
          y = H[j];
        }
      }
    }
    printf("%d\n", depth[y] - depth[x] + 2);
    printf("%d ", v);
    while (true) {
      printf("%d ", y);
      if (y == x) break;
      y = par[y];
    }
    printf("\n");
    k--;
  }
}
