class M{
  public void main(String s[]) throws Exception{
    Account acc=new Account();
    Client c1=new Client(acc,"Alice",2000);Client c2=new Client(acc,"Bob",-1000);
    c1.start();c2.start();
    c1.join();c2.join();
  }
}
class Account{
  private int m;
  public synchronized void add(int n){m+=n;}
  public synchronized int read(){return m;}
  public synchronized boolean isInbound(){return 0<=m && m<10000;}
}
class Client extends Thread{
  private Account b_;
  private String n_;
  private int a_;
  public Client(Account bank, String name, int add){b_=bank;n_=name;a_=add;}
  public void run(){
    try{
      for(;;){
        b_.add(a_);
        System.out.println(n_+":"+b_.read());
        if(!b_.isInbound()) break;
        Thread.sleep((a_>0?(a_):(-a_))/2);
      }
    }catch(Exception e){ e.printStackTrace(); }
    System.out.println(n_+":End");
  }
}