#include <bits/stdc++.h>
using namespace std;
const long long int MOD = 1e9 + 7;
void swap(int *a, int *b) {
  int temp = *a;
  *a = *b;
  *b = temp;
}
unsigned long long int POW(unsigned long long int p, int b) {
  unsigned long long int ans = 1LL;
  while (b > 0) {
    if (b & 1) {
      ans = ans * 1LL * p;
    }
    b /= 2;
    p = p * 1LL * p;
  }
  return ans;
}
long long int power(long long int a, long long int b, long long int mod) {
  long long int x = 1;
  long long int y = a;
  while (b > 0) {
    if (b & 1) {
      x = x * y;
      x %= mod;
    }
    y = y * y;
    y %= mod;
    b /= 2;
  }
  return x;
}
long long int add(long long int a, long long int b, long long int m = MOD) {
  long long int x = a + b;
  while (x >= m) x -= m;
  while (x < 0) x += m;
  return x;
}
long long int sub(long long int a, long long int b, long long int m = MOD) {
  long long int x = a - b;
  while (x < 0) x += m;
  while (x >= m) x -= m;
  return x;
}
long long int mul(long long int a, long long int b, long long int m = MOD) {
  long long int x = a * 1ll * b;
  x %= m;
  if (x < 0) x += m;
  return x;
}
vector<char> g[1001];
int main() {
  string str;
  cin >> str;
  string temp = "";
  int idx = 0;
  bool ek = false;
  for (int i = 0; i < str.size();) {
    if (isdigit(str[i])) {
      int j = i;
      bool hai = false;
      for (j = i; j < str.size(); j++) {
        if (!isdigit(str[j]) and !(str[j] == '.')) break;
        if (str[j] == '.' and (j + 2) < str.size() and
            (j + 3 >= (int)str.size() or !isdigit(str[j + 3]) ? 1 : 0)) {
          g[idx].push_back(str[j]);
          hai = true;
          ek = true;
        }
        if (isdigit(str[j])) g[idx].push_back(str[j]);
      }
      if (!hai) {
        g[idx].push_back('.');
        g[idx].push_back('0');
        g[idx].push_back('0');
      }
      i = j;
      idx++;
    } else
      i++;
  }
  if (ek == false) {
    int s = 0;
    int cnt = 0;
    int carry = 0;
    vector<char> ans;
    for (int i = 0; i < idx; i++) {
      for (int j = 0; j < 3; j++) g[i].pop_back();
    }
    while (true) {
      s = 0;
      bool mila = false;
      for (int i = 0; i < idx; i++) {
        if (g[i].empty()) continue;
        s += (g[i].back() - '0');
        g[i].pop_back();
        mila = true;
      }
      if (mila == false) break;
      if (cnt == 3) {
        ans.push_back('.');
        cnt = 0;
      }
      s += carry;
      ans.push_back(s % 10 + '0');
      carry = s / 10;
      cnt++;
    }
    while (carry != 0) {
      if (cnt == 3) {
        ans.push_back('.');
        cnt = 0;
      }
      ans.push_back(carry % 10 + '0');
      carry /= 10;
      cnt++;
    }
    reverse(ans.begin(), ans.end());
    for (int i = 0; i < ans.size(); i++) cout << ans[i];
  } else {
    vector<char> ans;
    int s = 0;
    int cnt = 0;
    int carry = 0;
    for (int i = 0; i < idx; i++) {
      s += g[i].back() - '0';
      g[i].pop_back();
    }
    s += carry;
    ans.push_back(s % 10 + '0');
    carry = s / 10;
    s = 0;
    for (int i = 0; i < idx; i++) {
      s += g[i].back() - '0';
      g[i].pop_back();
      g[i].pop_back();
    }
    s += carry;
    ans.push_back(s % 10 + '0');
    carry = s / 10;
    ans.push_back('.');
    while (true) {
      s = 0;
      bool mila = false;
      for (int i = 0; i < idx; i++) {
        if (g[i].empty()) continue;
        s += (g[i].back() - '0');
        g[i].pop_back();
        mila = true;
      }
      if (mila == false) break;
      if (cnt == 3) {
        ans.push_back('.');
        cnt = 0;
      }
      s += carry;
      ans.push_back(s % 10 + '0');
      carry = s / 10;
      cnt++;
    }
    while (carry != 0) {
      if (cnt == 3) {
        ans.push_back('.');
        cnt = 0;
      }
      ans.push_back(carry % 10 + '0');
      carry /= 10;
      cnt++;
    }
    int value = 0;
    if (ans[0] == '0' and ans[1] == '0') value = 3;
    reverse(ans.begin(), ans.end());
    for (int i = 0; i < ans.size() - value; i++) cout << ans[i];
  }
}
