#include <bits/stdc++.h>
const long long MAX_N = 3e5 + 10;
const long long MOD = 1e9 + 9;
using namespace std;
vector<int> g1[MAX_N];
vector<int> g[MAX_N];
vector<int> current;
int p[MAX_N];
int mark[MAX_N];
int d[MAX_N];
int h[MAX_N];
int n, m, k;
void rt(int v) {
  mark[v]++;
  for (auto x : g1[v]) {
    if (!mark[x]) {
      p[x] = v;
      h[x] = h[v] + 1;
      g[x].push_back(v);
      g[v].push_back(x);
      rt(x);
    }
  }
}
void solve() {
  cout << "CYCLES\n";
  int ct = 0;
  for (int i = 2; i <= n; ++i) {
    int v = i;
    if (g[v].size() > 1) continue;
    ct++;
    pair<int, int> pr;
    int res = 1e9;
    vector<pair<int, int>> vc;
    for (auto x : g1[v]) {
      if (x == p[v]) continue;
      if ((h[v] - h[x]) % 3 != 2 and h[v] - h[x] + 1 < res) {
        res = h[v] - h[x] + 1;
        pr.second = v;
        pr.first = x;
      }
      vc.push_back({h[x], x});
    }
    sort(vc.begin(), vc.end());
    for (int i = 0; i < vc.size() - 1; ++i) {
      int len = vc[i + 1].first - vc[i].first + 2;
      if (len % 3 and res > len) {
        res = len;
        pr = {vc[i].second, vc[i + 1].second};
      }
    }
    int now = pr.second;
    cout << res << "\n";
    if (pr.second != v) cout << v << "\n";
    while (1) {
      cout << now << " ";
      if (now == pr.first) break;
      now = p[now];
    }
    cout << "\n";
    if (ct == k) exit(0);
  }
  exit(0);
}
void dfs(int v, int f) {
  for (auto x : g[v]) {
    if (x != f) {
      d[x] = d[v] + 1;
      dfs(x, v);
    }
  }
}
void sfd(int v, int f, int dest) {
  current.push_back(v);
  if (v == dest) {
    cout << current.size() << "\n";
    for (auto x : current) cout << x << " ";
    exit(0);
  }
  for (auto x : g[v]) {
    if (x != f) sfd(x, v, dest);
  }
  current.pop_back();
}
int main() {
  cin >> n >> m >> k;
  if (n == 1) return cout << "PATH\n1\n1", 0;
  if (n == 2) return cout << "PATH\n2\n1 2", 0;
  for (int i = 0; i < m; ++i) {
    int u, v;
    scanf("%d%d", &v, &u);
    g1[u].push_back(v);
    g1[v].push_back(u);
  }
  rt(1);
  int now = 0, v = 1;
  for (int i = 1; i <= n; ++i) {
    if (h[i] > now) {
      now = h[i];
      v = i;
    }
  }
  dfs(v, 0);
  now = 0;
  int best = 0;
  for (int i = 1; i <= n; ++i) {
    if (d[i] > now) {
      now = d[i];
      best = i;
    }
  }
  if (n / (double)k <= now) {
    cout << "PATH\n";
    sfd(v, 0, best);
  } else
    solve();
  return 0;
}
