#include <bits/stdc++.h>
using namespace std;
const int N = 3e5;
vector<int> g[N];
vector<int> dst[N];
int n, m, k;
bool vis[N];
vector<int> leaf;
int h[N];
int f[N];
void dfs(int u) {
  bool l = 1;
  h[u] = 0;
  vis[u] = 1;
  for (int v : g[u]) {
    if (vis[v]) continue;
    l = 0;
    dst[u].push_back(v);
    f[v] = u;
    dfs(v);
    h[u] = max(h[u], h[v] + 1);
  }
  if (l) leaf.push_back(u);
}
deque<int> path;
void getPath(int u, int f) {
  path.push_front(u);
  int nv = -1;
  int maxH = -1;
  for (int v : dst[u]) {
    if (v == f) continue;
    if (h[v] > maxH) {
      maxH = h[v];
      nv = v;
    }
  }
  if (nv == -1) return;
  getPath(nv, u);
}
deque<int> cycle[N];
void getCycle(int u) {
  int cnt = 0;
  int v = u;
  int dis1 = 0;
  int dis2 = 0;
  while (cnt != 2) {
    v = f[v];
    cycle[u].push_back(v);
    if (cnt == 0) dis1++, dis2++;
    if (cnt == 1) dis2++;
    if (v != f[u] && (v == g[u][0] || v == g[u][1] || v == g[u][2])) {
      cnt++;
      if ((dis2 + 1) % 3 != 0) return;
    }
  }
  dis1--;
  while (dis1--) cycle[u].pop_front();
}
int main() {
  ios::sync_with_stdio(0);
  cin >> n >> m >> k;
  int u;
  for (int i = 0; i < m; i++) {
    int u, v;
    cin >> u >> v;
    g[u].push_back(v);
    g[v].push_back(u);
  }
  dfs(1);
  if (h[1] >= (n * 1.0 / k)) {
    getPath(1, -1);
    cout << "PATH"
         << "\n";
    cout << path.size() << "\n";
    for (int i : path) cout << i << " ";
    cout << "\n";
  } else {
    cout << "CYCLES"
         << "\n";
    for (int i = 0; i < k; i++) {
      int u = leaf[i];
      getCycle(u);
      cout << cycle[u].size() + 1 << "\n";
      cout << u << " ";
      for (int j : cycle[u]) cout << j << " ";
      cout << "\n";
    }
  }
}
