#include <bits/stdc++.h>
using namespace std;
template <class T>
class compare {
 public:
  bool operator()(pair<T, T> x, pair<T, T> y) {
    if (x.second == y.second) {
      return x.first < y.first;
    }
    return x.second < y.second;
  }
};
template <class T>
ostream &operator<<(ostream &os, const pair<T, T> &a) {
  os << a.first << " " << a.second;
}
template <class T>
pair<T, T> operator+(const pair<T, T> &a, const pair<T, T> &b) {
  return {a.first + b.first, a.second + b.second};
}
template <class T>
pair<T, T> operator-(const pair<T, T> &a, const pair<T, T> &b) {
  return {a.first - b.first, a.second - b.second};
}
template <class T>
pair<T, T> operator*(const pair<T, T> &a, const pair<T, T> &b) {
  return {a.first * b.first, a.second * b.second};
}
template <class T>
pair<T, T> operator%(const pair<T, T> &a, const pair<T, T> &b) {
  return {a.first % b.first, a.second % b.second};
}
template <class T, class U>
pair<T, T> operator+(const pair<T, T> &a, const U &b) {
  return {a.first + b, a.second + b};
}
template <class T, class U>
pair<T, T> operator*(const pair<T, T> &a, const U &b) {
  return {a.first * b, a.second * b};
}
int Set(int N, int pos) { return N = N | (1 << pos); }
int reset(int N, int pos) { return N = N & ~(1 << pos); }
bool check(int N, int pos) { return (bool)(N & (1 << pos)); }
set<int> remaining;
map<pair<int, int>, bool> forbidden;
void dfs(int u) {
  vector<int> ans;
  remaining.erase(u);
  auto it = remaining.begin();
  while (it != remaining.end()) {
    int mini = min(u, *it);
    int maxi = max(u, *it);
    if (!forbidden[pair<int, int>(mini, maxi)]) {
      ans.push_back(*it);
    }
    it++;
  }
  for (int i = 0; i < ans.size(); i++) remaining.erase(ans[i]);
  for (int i = 0; i < ans.size(); i++) dfs(ans[i]);
}
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  int n, m, k;
  cin >> n >> m >> k;
  int d = n - 1;
  for (int i = 2; i <= n; i++) remaining.insert(i);
  for (int i = 0; i < m; i++) {
    int u, v;
    cin >> u >> v;
    pair<int, int> x = make_pair(min(u, v), max(u, v));
    forbidden[x] = true;
    if (x.first == 1) d--;
  }
  int cc = 0;
  for (int i = 2; i <= n; i++) {
    if (remaining.find(i) != remaining.end()) {
      pair<int, int> x = make_pair(1, i);
      if (!forbidden[x]) {
        dfs(i);
        cc++;
      }
    }
  }
  if (!remaining.empty()) {
    cout << "impossible" << endl;
    return 0;
  }
  if (cc > k || d < k) {
    cout << "impossible" << endl;
    return 0;
  }
  cout << "possible" << endl;
  return 0;
}
