#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2.5e5 + 7;
const int INF = 0x3f3f3f3f;
vector<int> g[MAXN];
int n, m, k, dep_max, du;
int dep[MAXN], pre[MAXN];
bool isLeaf[MAXN], vis[MAXN];
void dfs(int u) {
  dep_max = dep[u] > dep_max ? dep[du = u] : dep_max;
  vis[u] = isLeaf[u] = true;
  for (int v : g[u])
    if (!vis[v]) {
      isLeaf[u] = false;
      pre[v] = u;
      dep[v] = dep[u] + 1;
      dfs(v);
    }
}
void printv(int &v) {
  printf("%d ", v);
  v = pre[v];
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int u, v, i = 1; i <= m; i++) {
    scanf("%d%d", &u, &v);
    g[u].emplace_back(v);
    g[v].emplace_back(u);
  }
  dep[1] = 1;
  dfs(1);
  if (dep_max >= n / k) {
    for (printf("PATH\n%d\n", dep_max); du; printv(du))
      ;
  } else {
    puts("CYCLES");
    for (int u; k; u++)
      if (isLeaf[u]) {
        vector<int> a;
        for (int v : g[u])
          if (v != pre[u]) a.push_back(v);
        if (dep[a[0]] > dep[a[1]]) swap(a[0], a[1]);
        int d0 = dep[a[0]];
        int d1 = dep[a[1]];
        int d2 = dep[u];
        int v = u;
        if ((d2 - d0 + 1) % 3) {
          for (printf("%d\n%d ", (d2 - d0 + 1), u), v = pre[u]; v != pre[a[0]];
               printv(v))
            ;
        } else if ((d2 - d1 + 1) % 3) {
          for (printf("%d\n%d ", (d2 - d1 + 1), u), v = pre[u]; v != pre[a[1]];
               printv(v))
            ;
        } else {
          for (printf("%d\n%d ", (d1 - d0 + 2), u), v = a[1]; v != pre[a[0]];
               printv(v))
            ;
        }
        puts("");
        k--;
      }
  }
  return 0;
}
