#include <bits/stdc++.h>
using namespace std;
const int N = 2.5e5 + 4;
int n, m, k;
bool used[N];
int h[N], p[N];
vector<int> g[N], way, leafs;
void read() {
  cin >> n >> m >> k;
  while (m--) {
    int u, v;
    cin >> u >> v;
    g[u].push_back(v);
    g[v].push_back(u);
  }
}
void check() {
  if ((long long)way.size() * k >= n) {
    cout << "PATH\n" << way.size() << "\n";
    for (int u : way) {
      cout << u << " ";
    }
    exit(0);
  }
}
void dfs(int u, int par = -1, int d = 0) {
  way.push_back(u);
  check();
  used[u] = 1;
  h[u] = d;
  p[u] = par;
  bool leaf = true;
  for (int to : g[u]) {
    if (used[to]) {
      continue;
    }
    leaf = false;
    dfs(to, u, d + 1);
  }
  if (leaf) {
    leafs.push_back(u);
  }
  way.pop_back();
}
vector<int> calc(int d, int u) {
  vector<int> res;
  while (d != u) {
    res.push_back(d);
    d = p[d];
  }
  res.push_back(u);
  return res;
}
vector<int> calc(int l) {
  int vx[2] = {0};
  int it = 0;
  for (int to : g[l]) {
    if (it == 2) {
      break;
    }
    if (to == p[l]) {
      continue;
    }
    vx[it++] = to;
  }
  int x = vx[0];
  int y = vx[1];
  if (h[x] < h[y]) {
    swap(x, y);
  }
  if ((h[l] - h[x] + 1) % 3 != 0) {
    return calc(l, x);
  } else if ((h[l] - h[y] + 1) % 3 != 0) {
    return calc(l, y);
  }
  vector<int> ans = {l};
  vector<int> xy = calc(x, y);
  ans.insert(ans.end(), xy.begin(), xy.end());
  return ans;
}
void write(vector<int> a) {
  cout << a.size() << "\n";
  for (int u : a) {
    cout << u << " ";
  }
  cout << "\n";
}
void solve() {
  read();
  dfs(1);
  cout << "CYCLES\n";
  for (int i = 0; i < k; ++i) {
    write(calc(leafs[i]));
  }
}
int main() {
  ios::sync_with_stdio(0);
  cout.tie(0), cin.tie(0);
  solve();
  return 0;
}
