#include <bits/stdc++.h>
using namespace std;
const int INF = 987654321;
const int MOD = 1000000007;
int N, M, K;
int d[250005];
int p[250005];
vector<int> adj[250005];
int path;
vector<int> leaf;
void dfs(int n, int par) {
  p[n] = par;
  int cnt = 0;
  for (int nxt : adj[n]) {
    if (!d[nxt]) {
      d[nxt] = d[n] + 1;
      if (d[nxt] >= (N + K - 1) / K) path = nxt;
      dfs(nxt, n);
      cnt++;
    }
  }
  if (!cnt) leaf.push_back(n);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> N >> M >> K;
  for (int i = 0; i < M; i++) {
    int a, b;
    cin >> a >> b;
    adj[a].push_back(b);
    adj[b].push_back(a);
  }
  d[1] = 1;
  dfs(1, 0);
  if (path) {
    vector<int> ans;
    while (path) {
      ans.push_back(path);
      path = p[path];
    }
    cout << "PATH\n";
    cout << ans.size() << '\n';
    for (int i = 0; i < ans.size(); i++) cout << ans[i] << ' ';
    cout << '\n';
    return 0;
  }
  cout << "CYCLES\n";
  for (int i = 0; i < K; i++) {
    int n = leaf[i];
    int u = 0, v = 0;
    for (auto nxt : adj[n]) {
      if (nxt != p[n]) {
        if (!u)
          u = nxt;
        else if (!v)
          v = nxt;
      }
    }
    vector<int> ans;
    if ((d[n] - d[u] + 1) % 3) {
      while (n != u) {
        ans.push_back(n);
        n = p[n];
      }
      ans.push_back(u);
    } else if ((d[n] - d[v] + 1) % 3) {
      while (n != v) {
        ans.push_back(n);
        n = p[n];
      }
      ans.push_back(v);
    } else {
      ans.push_back(n);
      if (d[u] < d[v]) swap(u, v);
      while (u != v) {
        ans.push_back(u);
        u = p[u];
      }
      ans.push_back(v);
    }
    cout << ans.size() << '\n';
    for (int j = 0; j < ans.size(); j++) cout << ans[j] << ' ';
    cout << '\n';
  }
}
