#include <bits/stdc++.h>
using namespace std;
long long gcd(long long x, long long y) { return y ? gcd(y, x % y) : x; }
int power(int x, int y) {
  int t = 1;
  for (; y; y >>= 1, x = x * x % (1000000000 + 7))
    if (y & 1) t = t * x % (1000000000 + 7);
  return t;
}
inline int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = 10 * x + ch - '0';
    ch = getchar();
  }
  return x * f;
}
inline long long readll() {
  long long x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = 10 * x + ch - '0';
    ch = getchar();
  }
  return x * f;
}
int n, m, k, len, onpath[300000 + 50], vis[300000 + 50], cyc,
    pathid[300000 + 50];
vector<int> g[300000 + 50], cycles[300000 + 50], path;
void printpath() {
  puts("PATH");
  printf("%d\n", path.size());
  for (int x : path) printf("%d ", x);
  puts("");
  exit(0);
}
void printcycle() {
  puts("CYCLES");
  ;
  for (int i = 0; i <= cyc - 1; ++i) {
    cout << cycles[i].size() << endl;
    for (int v : cycles[i]) cout << v << " ";
    cout << endl;
  }
  exit(0);
}
void addcycle(int s) {
  vector<int> cycc;
  for (int v : g[s]) {
    if (onpath[v]) {
      cycc.push_back(pathid[v]);
      if (cycc.size() == 3) break;
    }
  }
  sort(cycc.begin(), cycc.end());
  vector<int> &cur = cycles[cyc++];
  int l, r;
  if ((cycc[1] - cycc[0]) % 3 != 1) {
    l = cycc[0];
    r = cycc[1];
  } else if ((cycc[2] - cycc[1]) % 3 != 1) {
    l = cycc[1];
    r = cycc[2];
  } else {
    l = cycc[0];
    r = cycc[2];
  }
  cur.push_back(s);
  for (int i = l; i <= r; ++i) cur.push_back(path[i]);
  if (cyc >= k) printcycle();
}
void dfs(int s) {
  onpath[s] = 1;
  pathid[s] = path.size();
  vis[s] = 1;
  path.push_back(s);
  int flag = 1;
  for (int v : g[s]) {
    if (!vis[v]) {
      flag = 0;
      dfs(v);
    }
  }
  if (path.size() >= len) printpath();
  if (flag) addcycle(s);
  path.pop_back();
  pathid[s] = -1;
  onpath[s] = 0;
}
int main() {
  memset(pathid, -1, sizeof pathid);
  n = read(), m = read(), k = read();
  len = (n + k - 1) / k;
  for (int i = 1; i <= m; ++i) {
    int u = read(), v = read();
    g[u].push_back(v);
    g[v].push_back(u);
  }
  dfs(1);
  puts("-1");
  return 0;
}
