#include <bits/stdc++.h>
using namespace std;
const int MAX = 1e6;
long long n, m, k, ans, cnt, a, b, c, dis[MAX], parent[MAX], f[MAX];
string s;
set<int> st;
vector<int> adj[MAX], leaf, v1;
bool mark[MAX], path;
void dfs(int v) {
  mark[v] = 1;
  for (int i = 0; i < adj[v].size(); i++) {
    int u = adj[v][i];
    if (!mark[u]) {
      f[v]++;
      dis[u] = dis[v] + 1;
      parent[u] = v;
      dfs(u);
    }
  }
  if (f[v] == 0) {
    leaf.push_back(v);
  }
}
void f1(int x, int y, int z) {
  while (1) {
    if (x == y) {
      cout << y;
      return;
    }
    cout << x << ' ';
    x = parent[x];
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n >> m >> k;
  for (int i = 0; i < m; i++) {
    int u, v;
    cin >> u >> v;
    adj[v].push_back(u);
    adj[u].push_back(v);
  }
  dfs(1);
  for (int i = 2; i <= n; i++) {
    if (dis[i] >= n / k) {
      path = true;
      cout << "PATH" << '\n';
      cout << dis[i] + 1 << '\n';
      f1(i, 1, 1);
      return -0;
    }
  }
  assert(leaf.size() >= k);
  cout << "CYCLES" << '\n';
  for (int i = 0; i < k; i++) {
    int a = leaf[i];
    v1.clear();
    for (int j = 0; j < adj[a].size(); j++) {
      int x = adj[a][j];
      if (x != parent[a]) {
        v1.push_back(x);
      }
    }
    int b = v1[0];
    int c = v1[1];
    if (dis[b] < dis[c]) {
      swap(b, c);
    }
    if ((dis[a] - dis[b] + 1) % 3 != 0) {
      cout << dis[a] - dis[b] + 1 << '\n';
      f1(a, b, 2);
      cout << '\n';
      continue;
    }
    if ((dis[a] - dis[c] + 1) % 3 != 0) {
      cout << dis[a] - dis[c] + 1 << '\n';
      f1(a, c, 2);
      cout << '\n';
      continue;
    }
    if ((dis[b] - dis[c] + 2) % 3 != 0) {
      cout << dis[b] - dis[c] + 2 << '\n';
      cout << a << ' ';
      f1(b, c, 2);
      cout << '\n';
      continue;
    }
  }
}
