#include <bits/stdc++.h>
using namespace std;
template <class T, class T2>
inline int chkmax(T &x, const T2 &y) {
  return x < y ? x = y, 1 : 0;
}
template <class T, class T2>
inline int chkmin(T &x, const T2 &y) {
  return x > y ? x = y, 1 : 0;
}
const int MAXN = (1 << 20);
int n, m, k;
vector<int> G[MAXN], adj[MAXN];
void read() {
  cin >> n >> m >> k;
  for (int i = 0; i < m; i++) {
    int u, v;
    cin >> u >> v;
    G[u].push_back(v);
    G[v].push_back(u);
  }
}
bool visited[MAXN];
int dep[MAXN];
vector<int> leaves;
vector<int> back_ed[MAXN];
void dfs1(int u, int pr = -1, int d = 0) {
  visited[u] = true;
  dep[u] = d;
  int cnt_children = 0;
  for (int v : G[u])
    if (!visited[v]) {
      adj[u].push_back(v);
      adj[v].push_back(u);
      cnt_children++;
      dfs1(v, u, d + 1);
    } else if (v != pr && dep[v] < dep[u])
      back_ed[u].push_back(v);
  if (!cnt_children) leaves.push_back(u);
}
int par[MAXN];
void dfs(int u, int pr, int d) {
  dep[u] = d;
  par[u] = pr;
  for (int v : adj[u])
    if (v != pr) dfs(v, u, d + 1);
}
bool cmp(int u, int v) { return dep[u] > dep[v]; }
void solve() {
  dfs1(1, 0);
  dfs(1, -1, 1);
  int d1 = 1, d2 = 1;
  for (int i = 1; i <= n; i++)
    if (dep[i] > dep[d1]) d1 = i;
  dfs(d1, -1, 1);
  for (int i = 1; i <= n; i++)
    if (dep[i] > dep[d2]) d2 = i;
  int bound_k = n / k + (n % k != 0);
  if (dep[d2] >= bound_k) {
    vector<int> path;
    while (d2 != -1) {
      path.push_back(d2);
      d2 = par[d2];
    }
    cout << "PATH" << '\n';
    cout << ((int)path.size()) << '\n';
    for (int v : path) cout << v << " ";
    cout << '\n';
    return;
  }
  if (((int)leaves.size()) < k) {
    cout << -1 << '\n';
    return;
  }
  dfs(1, -1, 1);
  cout << "CYCLES" << '\n';
  for (int x : leaves) sort(back_ed[x].begin(), back_ed[x].end(), cmp);
  for (int x : leaves) {
    if (!k) break;
    k--;
    int F = back_ed[x][0], S = back_ed[x][1];
    if (dep[x] - dep[F] + 1 < dep[F] - dep[S] + 2) {
      if ((dep[x] - dep[F]) % 3 != 2) {
        int u = x;
        cout << dep[x] - dep[F] + 1 << '\n';
        cout << x << " ";
        while (true) {
          u = par[u];
          cout << u << " ";
          if (u == F) break;
        }
        cout << '\n';
      } else if ((dep[F] - dep[S] + 2) % 3 != 0) {
        int u = F;
        cout << dep[F] - dep[S] + 2 << '\n';
        cout << x << " " << u << " ";
        while (true) {
          u = par[u];
          cout << u << " ";
          if (u == S) break;
        }
        cout << '\n';
      } else {
        int u = x;
        cout << dep[x] - dep[S] + 1 << '\n';
        cout << x << " ";
        while (true) {
          u = par[u];
          cout << u << " ";
          if (u == S) break;
        }
        cout << '\n';
      }
    } else {
      if ((dep[F] - dep[S] + 2) % 3 != 0) {
        int u = F;
        cout << dep[F] - dep[S] + 2 << '\n';
        cout << x << " " << u << " ";
        while (true) {
          u = par[u];
          cout << u << " ";
          if (u == S) break;
        }
        cout << '\n';
      } else if ((dep[x] - dep[F]) % 3 != 2) {
        int u = x;
        cout << dep[x] - dep[F] + 1 << '\n';
        cout << x << " ";
        while (true) {
          u = par[u];
          cout << u << " ";
          if (u == F) break;
        }
        cout << '\n';
      } else {
        int u = x;
        cout << dep[x] - dep[S] + 1 << '\n';
        cout << x << " ";
        while (true) {
          u = par[u];
          cout << u << " ";
          if (u == S) break;
        }
        cout << '\n';
      }
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  read();
  solve();
  return 0;
}
