#include <bits/stdc++.h>
using namespace std;
const int MOD = 1000000007;
const long long INF = 1000000000000000000LL;
const int MAX_N = 300005;
int n, m, k;
vector<int> adjList[MAX_N];
int used[MAX_N];
int p[MAX_N], depth[MAX_N];
vector<int> leaves, path;
void dfs(int u) {
  used[u] = true;
  int cnt = 0;
  for (int v : adjList[u]) {
    if (used[v]) continue;
    p[v] = u;
    depth[v] = depth[u] + 1;
    ++cnt;
    dfs(v);
  }
  if (cnt == 0) leaves.push_back(u);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m >> k;
  for (int i = 0; i < m; ++i) {
    int u, v;
    cin >> u >> v;
    adjList[u].push_back(v);
    adjList[v].push_back(u);
  }
  p[1] = -1;
  depth[1] = 0;
  dfs(1);
  for (int u : leaves) {
    if (depth[u] + 1 >= (n + k - 1) / k) {
      while (u != -1) {
        path.push_back(u);
        u = p[u];
      }
      cout << "PATH\n" << path.size() << '\n';
      for (int u : path) cout << u << ' ';
      cout << '\n';
      return 0;
    }
  }
  cout << "CYCLES" << '\n';
  for (int i = 0; i < k; ++i) {
    int u = leaves[i], pos = 0;
    while (adjList[u][pos] == p[u]) ++pos;
    int v = adjList[u][pos++];
    while (adjList[u][pos] == p[u]) ++pos;
    int w = adjList[u][pos++];
    path.clear();
    if ((depth[u] - depth[v] + 1) % 3 != 0) {
      while (u != v) {
        path.push_back(u);
        u = p[u];
      }
      path.push_back(u);
    } else if ((depth[u] - depth[w] + 1) % 3 != 0) {
      while (u != w) {
        path.push_back(u);
        u = p[u];
      }
      path.push_back(u);
    } else {
      if (depth[v] < depth[w]) swap(v, w);
      path.push_back(u);
      while (v != w) {
        path.push_back(v);
        v = p[v];
      }
      path.push_back(w);
    }
    cout << path.size() << '\n';
    for (int u : path) cout << u << ' ';
    cout << '\n';
  }
  return 0;
}
