#include <bits/stdc++.h>
using namespace std;
int btw13, btw12, btw23;
int binary_search_n(int low, int high, int target, int biggestTwo) {
  if (low > high) return -1;
  int middle = (low + high) / 2;
  int currentResult = (biggestTwo - (2 * middle));
  if (currentResult == target)
    return middle;
  else if (currentResult < target)
    return binary_search_n(low, middle - 1, target, biggestTwo);
  else if (currentResult > target)
    return binary_search_n(middle + 1, high, target, biggestTwo);
}
int solve(pair<int, int> big1, pair<int, int> big2, pair<int, int> smallest) {
  int n = binary_search_n(0, min(big1.first, big2.first), smallest.first,
                          big2.first + big1.first);
  if (n == -1 || n > big2.first || n > big1.first) return -1;
  switch (big1.second + big2.second) {
    case 3:
      btw12 = n;
      if (big1.second == 1) {
        btw13 = (big1.first - n);
        btw23 = (big2.first - n);
      } else {
        btw23 = (big1.first - n);
        btw13 = (big2.first - n);
      }
      break;
    case 4:
      btw13 = n;
      if (big1.second == 1) {
        btw12 = (big1.first - n);
        btw23 = (big2.first - n);
      } else {
        btw23 = (big1.first - n);
        btw12 = (big2.first - n);
      }
      break;
    case 5:
      btw23 = n;
      if (big1.second == 2) {
        btw12 = (big1.first - n);
        btw13 = (big2.first - n);
      } else {
        btw13 = (big1.first - n);
        btw12 = (big2.first - n);
      }
      break;
  }
  return 1;
}
int main() {
  pair<int, int> a, b, c;
  int answer;
  scanf("%d%d%d", &a.first, &b.first, &c.first);
  a.second = 1;
  b.second = 2;
  c.second = 3;
  if (a.first <= b.first && a.first <= c.first) {
    answer = solve(b, c, a);
  } else if (b.first <= a.first && b.first <= c.first) {
    answer = solve(a, c, b);
  } else if (c.first <= a.first && c.first <= b.first) {
    answer = solve(a, b, c);
  }
  if (answer == -1)
    printf("Impossible");
  else {
    printf("%d %d %d", btw12, btw23, btw13);
  }
  return 0;
}
