开盒有风险
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

有  种不同的卡包和  种不同的卡片。

对于第  种卡包,每包恰好会开出  张卡。开出每一张卡时,得到第  种卡片的概率为 。保证对于任意一种卡包,其对应的所有卡片开出概率之和均为 

现在你一共购买了:

  • 第  种卡包  包;
  • 第  种卡包  包;
  • ...
  • 第  种卡包  包。

请你求出最终得到的每一种卡片的期望张数。


输入描述:

第一行包含三个整数 n,m,k,分别表示卡包种类数、卡片种类数以及每包卡片数。

接下来 n 行,每行包含 m 个实数,其中第 i 行第 j 个实数 pi,j 表示从第 i 种卡包中开出一张第 j 种卡片的概率。

最后一行包含 n 个整数 a1,a2,...,an,表示每种卡包购买的数量。

  • 对于 100% 的数据,1n,m1000
  • 1k1000
  • 0ai1000
  • 0pi,j1
  • pi,j 保留 2 位小数
  • 保证对于任意 1in,都有 j=1mpi,j=1

输出描述:

输出一行,共 m 个实数。

第 j 个实数表示第 j 种卡片最终获得张数的期望值。

所有答案均需保留两位小数输出。

示例1

输入

复制
2 3 10
0.50 0.30 0.20
0.20 0.50 0.30
3 2

输出

复制
19.00 19.00 12.00
示例2

输入

复制
3 2 5
0.33 0.67
0.50 0.50
0.25 0.75
2 3 4

输出

复制
15.80 29.20